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

React Native WebView触发导航崩溃:RCTComponentViewRegistry异常

React Native WebView onMessage回调内导航导致崩溃的解决方案

崩溃的核心原因是WebView的onMessage回调运行在非主线程,而React Navigation的导航操作属于UI更新,必须在主线程执行,这就触发了RCTComponentViewRegistry的异常。按钮点击的onPress回调本身就在主线程执行,所以不会出现这个问题。

解决方案1:将导航操作切换到主线程执行

React Native提供了多种方式将代码调度到主线程,优先推荐InteractionManager.runAfterInteractions(确保所有交互完成后执行),也可以用setTimeout(0延迟即可将任务放入主线程队列)。

修改你的onEventComplete函数:

import { InteractionManager } from 'react-native';

const onEventComplete = () => {
  InteractionManager.runAfterInteractions(() => {
    navigation.push('SomeScreen', { autoRecord: true });
  });
};

或者使用简化的setTimeout写法:

const onEventComplete = () => {
  setTimeout(() => {
    navigation.push('SomeScreen', { autoRecord: true });
  }, 0);
};

解决方案2:增加组件挂载状态校验(可选)

如果WebView所在组件可能在事件触发前卸载,建议增加挂载状态校验,避免在组件销毁后执行导航操作:

import { useRef, useEffect, InteractionManager } from 'react';

const isMounted = useRef(true);

useEffect(() => {
  return () => {
    isMounted.current = false;
  };
}, []);

const onEventComplete = () => {
  InteractionManager.runAfterInteractions(() => {
    if (isMounted.current) {
      navigation.push('SomeScreen', { autoRecord: true });
    }
  });
};

额外验证要点

  • 确保navigation对象未被销毁或重置
  • 确认WebView的onMessage事件数据解析正确,避免因数据格式错误引发后续逻辑异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:26:03