2016-01-18 4 views
4

, когда я положил onPress в контур карты, он не работает. как это исправить?React Native loop this

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> 
    ); 
    } 
}); 

ответ

6

this ссылается на неправильный контекст, вам нужна область, чтобы быть лексический связанно, что и функция стрелки жира будет делать для вас.

Попробуйте вызвать вашу функцию как это:

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

Кроме того, необходимо связать функцию карты в правильном контексте, как это:

<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

+0

спасибо за ваш ответ, но получаю ошибку 'неопределенными» не является объектом (оценка „_this._handlePress“) ':( – Cattla

+0

Обновленный ответ, это должно работать для вас! –

+0

Он работает, благодаря! – Cattla