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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值