我正在构建一个react-web3应用程序。
如何在web3方法中访问超出范围的方法,如this.setState?
componentDidMount() {
var events = contractInstance.allEvents({fromBlock: 0, toBlock: 'latest'});
events.watch(function(error, result){
this.setState({result: result})
});
}
}
TypeError:无法读取未定义
的属性'setState'我可以使用filter方法(web3.eth.filter())轻松完成,但不能使用事件
答案 0 :(得分:0)
您可以使用箭头功能作为回调:
events.watch((error, result)=>{
this.setState({result: result})
});
对于所有箭头函数,'this'将在封闭上下文中采用相同的'this'值。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
请注意如果直接在componentDidMount()中或者在componentWillMount()的上下文中执行setState,它可以完美地工作。在这些地方,'this'指的是您的组件对象,正如您所期望的那样。但是一旦定义了回调函数,该函数中“this”的值可能会根据回调的使用方式而改变。因此,要在回调中强制“this”的值为您想要的值,您可以使用上述箭头函数。因为对于所有箭头函数,'this'将在封闭上下文中采用相同的'this'值。
或者,您可以使用bind:
events.watch(function(error, result){
this.setState({result: result})
}.bind(this));