Expo应用启动报错RNSScreenStackHeaderConfig未找到求助
解决Expo启动时RNSScreenStackHeaderConfig找不到的错误
错误信息
ERROR Invariant Violation: requireNativeComponent: "RNSScreenStackHeaderConfig" was not found in the UIManager. This error is located at: in RNSScreenStackHeaderConfig (created by ScreenStackHeaderConfig) in ScreenStackHeaderConfig (created by HeaderConfig) in HeaderConfig (created by SceneView) in RNSScreen (created by Animated(Anonymous)) in Animated(Anonymous) in Suspender (created by Freeze) in Suspense (created by Freeze) in Freeze (created by DelayedFreeze) in DelayedFreeze in InnerScreen (created by Screen) in Screen (created by SceneView) in SceneView (created by NativeStackViewInner) in Suspender (created by Freeze) in Suspense (created by Freeze) in Freeze (created by DelayedFreeze) in DelayedFreeze (created by ScreenStack) in RNSScreenStack (created by ScreenStack) in Unknown (created by ScreenStack) in ScreenStack (created by NativeStackViewInner) in NativeStackViewInner (created by NativeStackView) in RCTView (created by View) in View (created by SafeAreaProviderCompat) in SafeAreaProviderCompat (created by NativeStackView) in NativeStackView (created by NativeStackNavigator) in PreventRemoveProvider (created by NavigationContent) in NavigationContent in Unknown (created by NativeStackNavigator) in NativeStackNavigator (created by MainStack) in MainStack (created by App) in ThemeProvider (created by PaperProvider) in RCTView (created by View) in View (created by Portal.Host) in Portal.Host (created by PaperProvider) in RCTView (created by View) in View (created by SafeAreaInsetsContext) in SafeAreaProviderCompat (created by PaperProvider) in PaperProvider (created by App) in ContextProvider (created by AppDataProvider) in AppDataProvider (created by App) in ContextProvider (created by NavigationContextProvider) in NavigationContextProvider (created by App) in ContextProvider (created by AuthProvider) in AuthProvider (created by App) in EnsureSingleNavigator in BaseNavigationContainer in ThemeProvider in NavigationContainerInner (created by App) in Provider (created by App) in I18nextProvider (created by App) in RCTView (created by View) in View (created by GestureHandlerRootView) in GestureHandlerRootView (created by App) in RNCSafeAreaView in Unknown (created by App) in RNCSafeAreaProvider (created by SafeAreaProvider) in SafeAreaProvider (created by App) in App (created by RootApp) in ReactNativeProfiler (created by RootApp) in RCTView (created by View) in View (created by __Sentry.TouchEventBoundary) in __Sentry.TouchEventBoundary (created by RootApp) in RootApp (created by withDevTools(RootApp)) in withDevTools(RootApp) in RCTView (created by View) in View (created by AppContainer) in RCTView (created by View) in View (created by AppContainer) in AppContainer in main(RootComponent), js engine: hermes
详情
基于React Native和Expo开发的应用启动时触发上述错误,怀疑依赖不兼容,但无法定位具体依赖。已尝试多种常规修复手段均无效。
环境配置
package.json依赖摘要:
"dependencies": { "@config-plugins/react-native-callkeep": "^8.0.0", "@config-plugins/react-native-webrtc": "^9.0.0", "@gorhom/bottom-sheet": "^5.0.5", "@notifee/react-native": "^9.1.2", "@react-native-async-storage/async-storage": "^1.24.0", "@react-native-community/datetimepicker": "^8.2.0", "@react-native-community/netinfo": "^11.4.1", "@react-native-community/slider": "^4.5.5", "@react-native-firebase/analytics": "^19.0.0", "@react-native-firebase/app": "^19.0.0", "@react-native-firebase/auth": "^19.0.0", "@react-native-firebase/crashlytics": "^19.0.0", "@react-native-firebase/firestore": "^19.0.0", "@react-native-firebase/functions": "^19.0.0", "@react-native-firebase/messaging": "^19.0.0", "@react-native-firebase/remote-config": "^19.0.0", "@react-native-firebase/storage": "^19.0.0", "@react-navigation/material-top-tabs": "^7.0.1", "@react-navigation/native": "^6.1.18", "@react-navigation/native-stack": "^6.9.20", "@react-navigation/stack": "^6.4.1", "@reduxjs/toolkit": "^2.3.0", "@rneui/themed": "^4.0.0-rc.8", "@sentry/react-native": "^5.35.0", "async": "^3.2.6", "babel-plugin-module-resolver": "^5.0.2", "console-table-printer": "^2.12.1", "currency-master": "^1.1.0", "expo": "~51.0.28", "expo-av": "^14.0.7", "expo-camera": "^16.0.4", "expo-contacts": "^13.0.5", "expo-dev-client": "^4.0.29", "expo-device": "^6.0.2", "expo-image-manipulator": "^12.0.5", "expo-image-picker": "^15.0.7", "expo-linking": "^6.3.1", "expo-localization": "^15.0.3", "expo-location": "^17.0.1", "expo-media-library": "^16.0.5", "expo-notifications": "^0.28.19", "expo-splash-screen": "^0.27.6", "expo-status-bar": "~1.12.1", "expo-updates": "^0.25.27", "firebase": "^11.0.1", "i18next-intervalplural-postprocessor": "^3.0.0", "intl-pluralrules": "^2.0.1", "jssip": "^3.10.1", "libphonenumber-js": "^1.11.14", "moment": "^2.30.1", "moment-timezone": "^0.5.46", "patch-package": "^8.0.0", "react": "18.2.0", "react-i18next": "^15.1.1", "react-native": "0.74.5", "react-native-android-finish": "^1.2.1", "react-native-background-timer": "^2.4.1", "react-native-bouncy-checkbox": "^4.1.2", "react-native-callkeep": "^4.3.14", "react-native-copilot": "^3.3.2", "react-native-fast-image": "^8.6.3", "react-native-flash-message": "^0.4.2", "react-native-gesture-handler": "^2.20.0", "react-native-image-viewing": "^0.2.2", "react-native-incall-manager": "^4.2.0", "react-native-linear-gradient": "^2.8.3", "react-native-masked-text": "^1.13.0", "react-native-modal": "^13.0.1", "react-native-paper": "^5.12.5", "react-native-permissions": "^5.1.0", "react-native-reanimated": "^3.16.1", "react-native-restart": "^0.0.27", "react-native-safe-area-context": "^4.11.1", "react-native-screens": "^3.29.0", "react-native-share": "^11.0.4", "react-native-shimmer-placeholder": "^2.0.9", "react-native-sound": "^0.11.2", "react-native-svg": "^15.8.0", "react-native-uuid": "^2.0.3", "react-native-vision-camera": "^4.6.1", "react-native-webrtc": "^124.0.4", "react-redux": "^9.1.2", "text-encoding": "^0.7.0", "use-context-selector": "^2.0.0" }
已执行步骤
- 删除node_modules和package-lock.json
- 删除Pods和Podfile.lock
- 执行
npm cache clean --force - 执行
npm install - 执行
pod install - 执行
npx expo start --clear - 升级/降级react-native-screens和react-navigation相关库
疑问
- 是否是依赖版本不匹配导致的该问题?
- react-native-screens或其他导航相关库是否存在已知的兼容性问题?
- 还可以采取哪些额外步骤来解决该问题?
解决方案
1. 锁定兼容的依赖版本
你的Expo 51.0.28对应React Native 0.74.5,react-native-screens 3.29.0本身兼容该版本,但需确保导航库版本匹配:
- 修改package.json中
react-native-screens为"react-native-screens": "~3.29.0",避免自动升级到不稳定版本 - 确认
@react-navigation/native@6.1.18和@react-navigation/native-stack@6.9.20在Expo 51推荐范围内,若仍有问题可降级到@react-navigation/native-stack@6.9.18
2. 重新预构建原生模块
如果使用了expo prebuild,执行以下命令清理并重新生成原生文件:
npx expo prebuild --clean npm install cd ios && pod install && cd ..
3. 确保react-native-screens初始化
在App.js的最顶部添加导入语句,强制加载原生模块:
import 'react-native-screens';
4. 排查第三方插件冲突
你使用的react-native-callkeep、react-native-webrtc等插件的config可能修改了原生配置,导致冲突:
- 临时移除
@config-plugins/react-native-callkeep和@config-plugins/react-native-webrtc,重新启动应用测试 - 若恢复正常,逐步添加插件并排查具体冲突源
5. 深度清除缓存
除常规操作外,执行以下命令清除Expo和原生构建缓存:
npx expo r -c rm -rf ~/.expo/cache
- iOS:删除
~/Library/Developer/Xcode/DerivedData目录 - Android:删除
android/build和android/app/build目录,再重新构建
6. 降级到已知稳定版本
若react-native-screens 3.29.0仍有问题,尝试降级到3.27.0(Expo 51环境中更稳定):
npm install react-native-screens@3.27.0
针对疑问的解答
- 版本不匹配是核心原因:导航库与
react-native-screens的细微版本差异会导致原生组件注册失败,锁定兼容版本可解决大部分问题。 - 已知兼容性问题:
react-native-screens3.28.x部分版本在Expo 51中存在原生组件注册异常,降级到3.27.x或3.29.x稳定版可修复。 - 额外排查步骤:
- 创建最小化Expo项目,仅导入导航和
react-native-screens,测试是否正常运行,逐步添加依赖排查冲突 - 查看Xcode/Android Studio的构建日志,检查是否有原生编译错误导致组件未注册
- 创建最小化Expo项目,仅导入导航和
内容的提问来源于stack exchange,提问作者Anushree More
相关产品推荐
相关产品推荐

