这个。<name>不是一个函数

时间:2016-11-14 15:06:05

标签: reactjs react-native

这个问题得到了很多回答,但我已经尝试过所有这些问题都没有成功。我尝试绑定该函数,但它仍然给我这个错误:

_this3.toggleDrawer is not a function

代码:

class DrawerContent extends Component {
  toggleDrawer() {
    this.context.drawer.toggle()
  }
  _renderHeader(section) {
    if (section.content.length === 0) {
       var sectionID = section.title.match(/\d/g).join("")
       return(
         <View>
           <TouchableOpacity onPress={() => {
             NavigationActions.movie_grid({dataID: sectionID})
             this.toggleDrawer()
           }}>
             <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text>
           </TouchableOpacity>
         </View>
       )
    } else {
      return(
        <View>
          <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text>
        </View>
      )
    }
  }
}

2 个答案:

答案 0 :(得分:1)

你没有在这里包含所有代码,但我的猜测是你没有约束_renderHeader()。我假设这是在ListView中使用的,所以看起来应该是这样的:

<ListView
    renderHeader={this._renderHeader.bind(this)}
    ... />

this中绑定_renderHeader,然后可以在其他功能中正确绑定this

答案 1 :(得分:0)

对元素的React回调需要绑定才能使this正常工作。

尝试将以下功能添加到您的课程中:

onOpacityClick() {
    NavigationActions.movie_grid({dataID: sectionID});
    this.toggleDrawer();
}

尝试将您的第一次回复替换为:

   return(
     <View>
       <TouchableOpacity onPress={this.onOpacityClick.bind(this)}>
         <Text style={{color: "#000", padding: 15}}>{section.title.replace(/[0-9]|,/g, '')}</Text>
       </TouchableOpacity>
     </View>
   )