反应原生错误:undefined不是一个函数(评估'this._pressRow()')

时间:2016-03-23 03:20:45

标签: android react-native

一些代码:

renderMovie(product) {
   <TouchableHighlight
    onPress={this._pressRow()}>
   <View style={styles.container}>
     <View style={styles.rightContainer}>
       <Text style={styles.title}>{product.brand_domain}</Text>
       <Text style={styles.year}>{product.product_name}</Text>
     </View>
   </View>
  </TouchableHighlight>
  }
  _pressRow(){
    this.props.navigator.push({
      title:'detail',
      component:DetailView
    })
   }

1.red screen and error log:undefined不是函数(评估'this._pressRow()')
我使用'this._pressRow = this._pressRow.bind(this);'在构造函数()中 但它不起作用

3.doc example.but如果我使用'onPress = {this._onPressButton}',点击事件无效

renderButton: function() {
return (
  <TouchableHighlight onPress={this._onPressButton}>
    <Image
     style={styles.button}
     source={require('image!myButton')}
   />
  </TouchableHighlight>
 );
},

2 个答案:

答案 0 :(得分:2)

这里有一个范围问题..

要解决此问题,有两种可能的解决方案:

  
      
  1. 您需要将this绑定到方法:
  2.   
<ListView
   dataSource={this.state.dataSource}
   renderRow={this.renderMovie.bind(this)}
/>
  
      
  1. 您可以使用ES6胖箭
  2.   
renderMovie = (product) => {
  <TouchableHighlight
    onPress={this._pressRow()}>
    <View style={styles.container}>
      <View style={styles.rightContainer}>
        <Text style={styles.title}>{product.brand_domain}</Text>
        <Text style={styles.year}>{product.product_name}</Text>
      </View>
    </View>
  </TouchableHighlight>
}

_pressRow方法:

_pressRow(){
  this.props.navigator.push({
    title:'detail',
    component:DetailView
  })
}

答案 1 :(得分:1)

在ListView中声明renderRow函数时,应将其绑定到方法:

<ListView
   dataSource={this.state.dataSource}
   renderRow={this.renderMovie.bind(this)}
/>