Expo dev-client启动RN导航项目报RNSScreenStackHeaderConfig未找到错误
问题描述
使用Expo托管项目,执行expo start --dev-client命令启动自定义开发客户端时,抛出如下报错:
Invariant Violation: requireNativeComponent: "RNSScreenStackHeaderConfig" was not found in the UIManager. This error is located at: in RNSScreenStackHeaderConfig (created by HeaderConfig) in HeaderConfig (created by SceneView) in RNSScreen (created by AnimatedComponent) in AnimatedComponent in AnimatedComponentWrapper (created by Screen) in MaybeFreeze (created by Screen) in Screen (created by SceneView) in SceneView (created by NativeStackViewInner) in RNSScreenStack (created by ScreenStack) in ScreenStack (created by NativeStackViewInner) in NativeStackViewInner (created by NativeStackView) in RNCSafeAreaProvider (created by SafeAreaProvider) in SafeAreaProvider (created by SafeAreaInsetsContext) in SafeAreaProviderCompat (created by NativeStackView) in NativeStackView (created by NativeStackNavigator) in Unknown (created by NativeStackNavigator) in NativeStackNavigator (created by App) in EnsureSingleNavigator in BaseNavigationContainer in ThemeProvider in NavigationContainerInner (created by App) in Provider (created by App) in App (created by ExpoRoot) in ExpoRoot in RCTView (created by View) in View (created by AppContainer) in RCTView (created by View) in View (created by AppContainer) in AppContainer at node_modules/react-native/Libraries/Core/ExceptionsManager.js:104:6 in reportException at node_modules/react-native/Libraries/Core/ExceptionsManager.js:172:19 in handleException at node_modules/react-native/Libraries/Core/ReactFiberErrorDialog.js:43:2 in showErrorDialog at node_modules/expo-font/build/FontHooks.js:26:33 in loadAsync.then$argument_0 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
相同项目执行expo start通过Expo Go启动时,应用可完全正常运行。
问题根因
Expo Go内置了Expo SDK官方支持的所有常用原生依赖,因此不需要额外构建就能直接运行包含原生模块的代码;但自定义开发客户端(dev client)不会自动同步依赖变更,只要项目新增、更新了带原生代码的依赖,没有重新构建客户端就会出现「原生组件找不到」的报错。本次报错中缺失的RNSScreenStackHeaderConfig属于react-native-screens原生模块,是React Navigation原生栈导航的核心依赖。
解决步骤
- 先安装匹配当前Expo SDK版本的必要依赖,执行命令:
npx expo install react-native-screens react-native-safe-area-context,不要手动用npm/yarn安装不匹配的版本,避免版本兼容问题。 - 重新构建自定义开发客户端,原生依赖的变更无法通过热更新生效,必须重新打包客户端:
- 本地调试安卓可直接执行
npx expo run:android,使用EAS云构建执行eas build --profile development --platform android - 本地调试iOS可直接执行
npx expo run:ios,使用EAS云构建执行eas build --profile development --platform ios
- 本地调试安卓可直接执行
- 卸载设备/模拟器上已安装的旧版开发客户端,安装新构建完成的安装包,再执行
expo start --dev-client启动即可。 - 若重新构建后仍存在报错,检查
app.json配置,确认没有手动禁用react-native-screens相关插件,同时确认导航导入正确,使用的是官方维护的@react-navigation/native-stack而非弃用的旧版导航栈组件。 - 报错附带的「unmounted component上执行state更新」警告是原生报错导致组件异常卸载引发的连带问题,核心报错修复后会自动消失,无需单独处理。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

