加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

React-Native ListView onPress – undefined不是对象

发布时间:2020-12-15 09:32:57 所属栏目:百科 来源:网络整理
导读:我似乎在按下按钮时调用功能.无论我尝试什么方法,我都会得到不同的未定义错误. 我正在运行反应原生0.24,目前只编码Android设备. 请看下面的代码: class ListPage extends Component { constructor(props){ super(props); this.nav = props.nav; this.route
我似乎在按下按钮时调用功能.无论我尝试什么方法,我都会得到不同的未定义错误.

我正在运行反应原生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>
        );
    }
}

每当我按任一按钮我得到undefined不是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
    )
}

它现在说undefined不是this.nav和this.setState的对象

但如果我这样做:

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

它工作…..但我知道这不是正确的方法,我也不能为模态setState.为什么不使用第一种方法?非常感谢.

解决方法

好的,找到了解决方案.在renderRow中,我需要像这样绑定函数:

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

现在我可以使用第一种方法调用函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读