RN TypeError: _this3.setState is not a function

问题

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

上一篇:P8 保凸运算2


下一篇:linux占用最多内存进程查看