React Native循环这个

时间:2016-01-18 17:39:09

标签: javascript reactjs react-native

当我将onPress放入地图循环中时,它无法正常工作。如何解决?

var PageOne = React.createClass({
  _handlePress() {
    this.props.navigator.push({id: 2,});
  },
  render () {
      return (
        <View>          
          <TouchableOpacity onPress={this._handlePress}> //work here 
          <Text> One </Text>
          </TouchableOpacity>
          <View style={styles.albums}>
          {
            list.map(function(item, index){
              return (
                <TouchableOpacity key={index} onPress={this._handlePress}> //doesn't work hehre
                  <Text>{item}</Text>
                </TouchableOpacity>
              )
            })
          }
            </View>
      </View>
      );
  }
});

1 个答案:

答案 0 :(得分:8)

this指的是错误的上下文,你需要范围是词法绑定的,这就是胖箭头函数会为你做的。

尝试按照以下方式调用您的函数:

onPress={ () => this._handlePress() }

此外,您需要将map函数绑定到正确的上下文,如下所示:

<View style={styles.albums}>
  {
    list.map(function(item, index){
       return (
         <TouchableOpacity key={index} onPress={() => this._handlePress()}> 
           <Text>{item}</Text>
          </TouchableOpacity>
       )
     }.bind(this))
   }
</View>

或者像这样:

<View style={styles.albums}>
  {
    list.map((item, index) => {
       return (
         <TouchableOpacity key={index} onPress={() => this._handlePress()}> 
           <Text>{item}</Text>
         </TouchableOpacity>
       )
     })
   }
</View>

我设置了一个工作项目here

https://rnplay.org/apps/_PmG6Q