![](/img/trans.png)
[英]How to call a native JS function by a dynamic element inside a react class?
[英]Call class function inside a closure React native
我是 React Native 的新手,在这里遇到了一个问题,我想在onChangeText
函数中使用闭包而不是 lambda:
render() {
return (
<View style={{padding: 10}}>
<TextInput style={{height: 40}} placeholder="Type here"
onChangeText = {function(t) {
this.setState({text: t});
}}
// onChangeText={(text) => this.setState({text: text})}
/>
<Text style={{padding: 10, fontSize: 42}}>
{this.state.text.split(' ').map((word) => word && '🍕').join(' ')}
</Text>
</View>
);
}
问题出在闭包内部, this
是闭包上下文,而不是类上下文,所以我不能在那里调用setState
。 在 Java 中,我只是简单地删除它,一切正常,但是我如何在 JS 中做到这一点?
您可以使用 JavaScript 的bind 方法。
假设您想要的函数已经是您类中的一个方法。 IE:
class MyClass extends React.Component {
myMethodThatChangesState() {
this.setState(...);
}
render() {...}
}
React 需要纯函数。 避免使用 lambda 表达式,例如:
onChangeText={() => this.setState(..)}
通过 JavaScript 函数的 bind 方法将您的方法绑定到您的类,如下所示:
onChangeText={myMethodThatChangesState.bind(this)}
使用Function.bind(this)
返回一个以this
作为最后一个参数的函数 - 所以this
将是你的 React 类。 ES6 箭头函数执行相同的操作。
这样您就可以避免在渲染标记中使用箭头函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.