反应原生onPress事件不在循环中工作

时间:2016-12-08 16:58:04

标签: javascript reactjs react-native reactive-programming hybrid-mobile-app

我的班级代码

  

问题是onPress函数如果我在循环中使用它会出现以下错误

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

enter image description here

  如果我使用这行代码

,没有任何反应
onPress={this.onPressButton}
  

我知道这必须对绑定做些什么我没有得到帮助

export default class PlayGame extends Component {

  navigate(routName){
    this.props.navigator.push({
     name:  routName
   })
  }

  onPressButton() {
    alert("You tapped the button!");
  }

  render() {
    //var selectedLetter = Globals.URDU_ALPHABETS[Math.floor(Math.random()*Globals.URDU_ALPHABETS.length)];  //will be used when app is MVP
    //add selected array

    var selectedLetter = Globals.URDU_ALPHABETS[1];
    var randLetters =  shuffle(randomLetters(Globals.URDU_ALPHABETS,selectedLetter));
    playSelectedLetter(selectedLetter.name);      
    return (             
     <View style={{flex: 3,backgroundColor: 'silver', flexDirection: 'column', justifyContent:'space-between', alignItems: 'center'}}>                      
     <View style={{width: 400, height: 8, flex: 1, backgroundColor: 'steelblue'}}  /> 
     <View style={{flex: 3,backgroundColor: 'silver', flexDirection: 'row', justifyContent:'space-between', alignItems: 'center'}}>

     {Object.keys(randLetters).map(function(key,index) {   

       return <TouchableHighlight key={index} letterName={randLetters[key].name} onPress={() => this.onPressButton()} > 
       <View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} key={index}><Text key={index} >{randLetters[key].name}</Text></View> 
       </TouchableHighlight>

     }
     )}
     </View>     
     <TouchableHighlight onPress={this.onPressButton}>
     <Text>Button</Text>
     </TouchableHighlight>
     <View style={{width: 0, height: 0, backgroundColor: 'skyblue'}}><Text></Text></View>             
     </View>
  );
}

2 个答案:

答案 0 :(得分:5)

尝试更改:

Object.keys(randLetters).map(function(key,index) {

到:

Object.keys(randLetters).map((key,index) => {

您可以在类构造函数中绑定,也可以在渲染

中绑定这两种方式
{this.onPressButton.bind(this)}        {() => this.onPressButton()}

答案 1 :(得分:0)

您必须将其绑定到组件上下文:

export default class PlayGame extends Component {

    constructor(props) {
        super(props);

        this.onPressButton = this.onPressButton.bind(this)
    }
}