问题
TypeError: _this3.setState is not a function
at E:\ITCode\ReactNative\DailyStory\src\views\main\bill\billSearch\index.tsx:72
at tryCallOne (E:\ITCode\ReactNative\DailyStory\node_modules\promise\setimmediate\core.js:37)
at E:\ITCode\ReactNative\DailyStory\node_modules\promise\setimmediate\core.js:123
at E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:289
at _callTimer (E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:146)
at _callImmediatesPass (E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:194)
at Object.callImmediates (E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:458)
at MessageQueue.__callImmediates (E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:366)
at E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:135
at MessageQueue.__guard (E:\ITCode\ReactNative\DailyStory\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:343)
使用函数封装了一个选择器组件,方便全局调用,为了获取选择结果使用Promise
进行回调传值。
再回调函数用this.setState
修改变量值,然后报错如上面所示,调用代码如下。
_showDatePicker() {
//封装了子组件的函数
TimeUtils.showDatePicker()
.then((date: string) => {
this.setState({date: date}); //报错地方
this.initData();
})
.catch(error => {
console.log(error);
});
}
onPress={this._showDatePicker} //点击调用函数
原因:
this的指向问题。TimeUtils.showDatePicker()这个函数获取的是子组件返回的值,而内部需要修改的是父组件的 state。 这时this 就指的子组件而不是父组件,就会报这个错误。
解决方案:
传入函数时加一个绑定
onPress={this._showDatePicker.bind(this)}
参考
https://blog.csdn.net/ling_du/article/details/99840430