2016-04-26 6 views
2

Кажется, что я нажимаю кнопки вызова. Независимо от того, какой метод я пытаюсь получить разные неопределенные ошибки.React-Native ListView onPress - undefined не является объектом

Я запускаю реакцию native 0.24 и в настоящий момент кодирую только для Android-устройства.

смотрите код ниже:

class ListPage extends Component { 

    constructor(props){ 
    super(props); 
     this.nav = props.nav; 
     this.route = props.route; 
     this.ds = new ListView.DataSource({ 
      rowHasChanged: (row1, row2) => row1 !== row2, 
     }); 
     this.state = ({ 
      visible: false, 
      dataSource: this.ds.cloneWithRows(props.fullList), 
     }); 
    } 

    goToPage(name){ 
     this.nav.push({ name: name }); 
    } 

    loadModal() { 
     this.setState({ visible: true }); 
    } 

    list(row){ 
     return (
      <View style={styles.box}> 
        <TouchableNativeFeedback underlayColor="#FFF" 
        onPress={this.goToPage.bind(this,'ShowRow')}> 
         <View> 
          ...ShowRow Button 
         </View> 
        </TouchableNativeFeedback> 
        <TouchableNativeFeedback 
         onPress={this.loadModal.bind(this)} > 
         <View style={styles.button}> 
          ...Modal Button 
         </View> 
        </TouchableNativeFeedback> 
       </View> 
     ); 
    } 

    render(){ 
     return (
      <View style={styles.container}> 
       <Modal visible={this.state.visible} 
        onRequestClose={() => {this.setState({visible: false}) }} > 
        <View> 
         <Text>I am a Modal!</Text> 
        </View> 
       </Modal> 
       <ListView 
        dataSource={this.state.dataSource} 
        renderRow={this.list} /> 
      </View> 
     ); 
    } 
} 

Всякий раз, когда я нажимаю любую кнопку, я получаю не определено, не является ошибкой объектом для обоих this.goToPage.bind и this.loadModal.bind.

если я попробовать это:

render() { //or inside list(row) function 
    goToPage = function(name){ 
     this.nav.push etc etc 
    } 
    loadModal = function() { setState etc... } 
    return (
     ...render stuff 
    ) 
} 

он теперь говорит, не определено, не является объектом для обоих this.nav и this.setState

, но если я это сделать:

constructor() { 
    ... 
    goToPage = function(name){ 
     props.nav.push(...); 
    } 
} 

он работает ..... но я знаю, что это не правильный подход, и я не могу setState для модального. Почему он не работает с первым методом? Большое спасибо.

ответ

10

Хорошо, нашел решение. в renderRow мне нужно было связать такую ​​функцию:

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

Теперь я могу вызвать функции с помощью первого метода.

Смежные вопросы