我的React Native Component出了问题。
sayHi = (s) => {
console.log('hey' + s)
}
renderListItem(item, i) {
return (
<TouchableOpacity
key={i}
style={styles.listItem}
onPress={() => { this.sayHi('bob') }}>
<Text>{item}</Text>
</TouchableOpacity>
)
}
render() {
this.sayHi('patrick')
const { list } = this.props
return (
<View>
{list.map(this.renderListItem)}
</View>
)
}
在renderListItem
我收到错误 _this2.sayHi不是函数。
在线搜索但大多数帖子都不适合我的情况;我看了this post,但我已经有了一个箭头功能,所以这不是一个上下文问题。
功能控制台在render()
中正常登录。
我试图在构造函数中绑定this
,但我仍然得到错误。
答案 0 :(得分:4)
Array#map
在不同的上下文中执行回调,因此this
未正确绑定。根据文件:
语法
var new_array = arr.map(callback[, thisArg])
参数
[...]
<强>
thisArg
强>可选。执行回调时用作
this
的值。[...]
如果向
thisArg
提供了map
参数,则该参数将用作回调的this
值。否则,值undefined
将用作其this
值。
您可以将this
上下文作为第二个参数传递给Array#map
:
{list.map(this.renderListItem, this)}
或者,直接使用Function#bind
:
{list.map(this.renderListItem.bind(this))}
最后,您可以使用箭头功能:
{list.map((item, i) => this.renderListItem(item, i))}
虽然我会亲自选择第一个选项。
答案 1 :(得分:1)
仅供参考,Andrew Li的评论中提到的bind
解决方案可以通过更改此行来完成
{list.map(this.renderListItem)}
到这个
{list.map(this.renderListItem.bind(this))}