You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决React Native中RCTLinkingManager监听移除数量超出添加量报错

解决方案
  • 修正RCTLinkingManager头文件引入位置
    你当前代码将#import <React/RCTLinkingManager.h>写在了#ifdef FB_SONARKIT_ENABLED条件编译块内部,当编译环境不满足Flipper开启条件时,该头文件不会被导入,会导致Linking监听逻辑异常。请将该导入语句移到条件编译块外部,和其他RCT相关导入放在同一层级,修改后示例如下:
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
// 移动到此处
#import <React/RCTLinkingManager.h>

#ifdef FB_SONARKIT_ENABLED
#import <FlipperKit/FlipperClient.h>
// 剩余Flipper相关导入保持不变
...
  • 检查JS侧Linking监听器的注册/移除逻辑
    多数情况下该报错由JS侧监听器重复移除、或者移除时回调引用不匹配导致。请检查所有用到Linking.addEventListener的代码,确保销毁监听器的逻辑正确,推荐写法如下:
import { Linking, useEffect } from 'react-native'

// 组件内使用示例
useEffect(() => {
  const handleUrl = (event) => {
    // 处理深链接逻辑
    console.log('深链接地址:', event.url)
  }
  // 注册监听器
  const urlListener = Linking.addEventListener('url', handleUrl)
  // 销毁时正确移除
  return () => urlListener.remove()
}, [])

不要直接调用Linking.removeEventListener,该方法在新版RN中已经废弃,容易出现引用不匹配的问题。

  • 排查重复注册逻辑
    如果你同时使用了React Navigation等自带深链接处理能力的第三方库,不需要额外在AppDelegate中手动添加openURL和continueUserActivity两个方法,可以先将这两个方法注释后重新运行,排查是否是重复注册导致的冲突。

  • 清理缓存重新构建
    如果上述修改后仍报错,执行以下操作清理缓存后重新运行:

    1. 删除项目根目录的node_modules文件夹,重新执行包安装命令(npm install或yarn install)
    2. 进入ios目录,删除Podfile.lock和Pods文件夹,重新执行pod install
    3. 删除iOS模拟器中已安装的当前App,重新执行react-native run-ios启动项目

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:06:04