react native 报 Cannot read property 'bind' of undefined

先上代码

    //渲染行组件
    _renderRow(rowData) {
        return (
            <TouchableOpacity onPress={this.show.bind(this)}>
                <View style={styles.row}>
                    <Image style={styles.thumb} source={{uri: rowData.posters.thumbnail}}/>
                    <View style={styles.rightBox}>
                        <Text style={styles.title} numberOfLines={2}>{rowData.title}</Text>
                        <Text style={styles.subtitle}>上映时间:{rowData.year}</Text>
                        <Text style={styles.subtitle}>影长:{rowData.runtime}</Text>
                    </View>
                </View>
            </TouchableOpacity>
        )
    }

我给了个onPress绑定点击事件
一加上直接就报错了

clipboard.png

不知道什么原因!我看官方文档也是 onPress 绑定了个方法呀
我用匿名方法能正常弹内容呢!

            <TouchableOpacity onPress={() => {
                alert(rowData.title)
            }}>
阅读 5.1k
2 个回答

首先提示的很清楚 this.showundefined,然后帮你分析下原因:

  1. 组件里确实没有 show 方法(这个应该不太可能)

  2. this 并不是指向此组件的实例,比如 renderRow={this._renderRow}

最后你觉得下列有什么区别?

// 第一种
renderRow={this._renderRow}
// 第二种
renderRow={(row) => this._renderRow(row)}
// 第三种
renderRow={this._renderRow.bind(this)}
// 第四种
const _renderRow = (row) => { this.show() };
...
renderRow={_renderRow}

个人是觉得你的问题位于this.show.bind(this)这行代码,应该是this.show是undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题