[RN] 使用PanResponder,出现“Cannot read property ‘panHandlers’ of undefined”

20 篇文章 1 订阅

原因: 官网上给的例子是在componentWillMount里中定义panResponder函数,而componentWillMount已经废弃了,在componentDidMount中定义又不起作用

componentWillMount: function() {
    this._panResponder = PanResponder.create({
      // 要求成为响应者:
      onStartShouldSetPanResponder: (evt, gestureState) => true,
      onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
      onMoveShouldSetPanResponder: (evt, gestureState) => true,
      onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,

      onPanResponderGrant: (evt, gestureState) => {
        // 开始手势操作。给用户一些视觉反馈,让他们知道发生了什么事情!

        // gestureState.{x,y} 现在会被设置为0
      },
      onPanResponderMove: (evt, gestureState) => {
        // 最近一次的移动距离为gestureState.move{X,Y}

        // 从成为响应者开始时的累计手势移动距离为gestureState.d{x,y}
      },
      onPanResponderTerminationRequest: (evt, gestureState) => true,
      onPanResponderRelease: (evt, gestureState) => {
        // 用户放开了所有的触摸点,且此时视图已经成为了响应者。
        // 一般来说这意味着一个手势操作已经成功完成。
      },
      onPanResponderTerminate: (evt, gestureState) => {
        // 另一个组件已经成为了新的响应者,所以当前手势将被取消。
      },
      onShouldBlockNativeResponder: (evt, gestureState) => {
        // 返回一个布尔值,决定当前组件是否应该阻止原生组件成为JS响应者
        // 默认返回true。目前暂时只支持android。
        return true;
      },
    });
  },

  render: function() {
    return (
      <View {...this._panResponder.panHandlers} />
    );
  },

解决方法: 在构造函数里写

    constructor(props) {
        super(props);

        this.state = {};
        this._panResponder = PanResponder.create({
        	...
        })
    }
根据引用中提供的信息,报错"TypeError: Cannot read property 'orderId' of undefined"是由于尝试读取一个未定义的属性导致的。具体来说,在你的代码中,尝试读取对象this.eDetail的属性orderId时出现了问题。这意味着对象this.eDetail本身是未定义的,因此无法访问它的orderId属性。 根据引用提供的代码片段,我们可以看到在判断条件中使用了this.eDetail.orderId,如果对象this.eDetail未定义,那么尝试访问它的orderId属性肯定会导致报错。 为了解决这个问题,你需要确保对象this.eDetail在使用它的属性之前已经被正确地定义和赋值。你可以在使用this.eDetail.orderId之前,使用if语句或其他方法检查this.eDetail是否被正确地初始化和赋值。例如,你可以使用如下的代码来进行判断: if (this.eDetail && this.eDetail.orderId) { // 在此处处理this.eDetail.orderId的逻辑 } else { // 如果this.eDetail或this.eDetail.orderId未定义,则进行相应的处理 } 这样,如果this.eDetail未定义或this.eDetail.orderId未定义,就不会尝试访问未定义的属性,从而避免了报错。 另外,根据引用的说明,如果你在判断条件中使用if (!res.company.id)时,如果res.company是未定义的,尝试访问它的id属性也会导致类似的报错。因此,在使用这种判断条件之前,你也需要确保对象res.company已被正确地定义和赋值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue打包Cannot read property 'tapPromise' of undefined报错处理.docx](https://download.csdn.net/download/rongbo91/77070400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [RN----TypeError: Cannot read property ‘current‘ of undefined, js engine: hermes](https://blog.csdn.net/weixin_50648325/article/details/132366427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Cannot read property 'id' of undefined](https://blog.csdn.net/loveyour_1314/article/details/100195577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值