2017-02-19 75 views
0
onTypeSelect (str) { 
     this.setState({taskType: str}) 
    } 

<TouchableOpacity onPress={this.onTypeSelect('type1').bind(this)}> 
</TouchableOpacity> 

未定义不是对象(正在评估'_this3.onTypeSelect('type1).bind')。我在调用带参数的函数时出错了

任何人都可以帮助我吗?我是反应原生的初学者。

回答

3

试试这个

onTypeSelect (str) { 
    this.setState({taskType: str}) 
} 

<TouchableOpacity onPress={() => { this.onTypeSelect('type1'); }} /> 

当你.bind(本),你需要传递一个函数,而不是函数的返回值,在这种情况下,undefined。这种方式起作用,因为该功能是从组件范围内调用的,因此使this成为有效的参考。

另一种方式来解决这个问题是通过使用绑定是这样的:

this.onTypeSelect.bind(this, 'type1') 

编辑:感谢您的意见和对方回复,我增加了完成信息的缘故信息。 Alexander T.Bartek F.

+0

它的工作原理!谢谢。 – mojizo

+2

您的代码有效,但解释不正确。 *当你.bind(this)时,范围是当前的HTMLDOMElement,* - 这不是真的。 'this'指向绑定时的组件。问题是应该在函数本身使用'bind',而不是函数返回的结果。有关详细说明,请参阅@Alexander .answer –

2

基于.bind文档,你必须传递参数给.bind像这样

this.onTypeSelect.bind(this, 'type1') 

fun.bind(thisArg[, arg1[, arg2[, ...]]])

在你的榜样,你调用方法

this.onTypeSelect('type1') 

该方法返回结果(在这种情况下结果undefined),和你想申请.bind结果undefined

undefined.bind(this) 

然而.bind只存在于Function对象,这是你为什么得到错误。

+1

感谢您的帮助,我将很快阅读文档。 – mojizo