React Native集成@react-navigation/native-stack时出现ViewManagerResolver返回null错误
看起来你踩了版本兼容性的坑!我帮你梳理下问题和解决方向:
问题核心分析
你用@react-native-community/cli新建了RN项目,跟着教程集成@react-navigation/native-stack后,只要用<NavigationContainer>包裹导航栈就报错,直接渲染组件却正常,重新建项目也没用。从你贴的package.json能看出来:你用的是React Native 0.76.5,搭配的却是React Navigation 7.x版本——而React Navigation 7.x是专门适配RN 0.77及以上版本的,版本不匹配就是导致这个错误的关键原因!
具体解决方案
方案一:降级React Navigation到适配RN 0.76的版本
这是最快捷的调整方式,把导航库降到6.x版本(适配RN 0.70-0.76):
- 先卸载当前的导航库:
npm uninstall @react-navigation/native @react-navigation/native-stack
- 安装适配的6.x版本:
npm install @react-navigation/native@6.x @react-navigation/native-stack@6.x
- 确保安装了导航依赖的基础库(如果之前没装的话):
npm install react-native-screens react-native-safe-area-context
方案二:升级React Native到0.77+版本
如果你想使用最新的React Navigation 7.x,那就把RN升级到0.77及以上版本,具体升级步骤可以参考RN官方的升级指南,这里给你快速命令(注意备份项目):
npx react-native upgrade
最后别忘了清理缓存重建项目
不管选哪个方案,都要清理旧缓存避免干扰:
- 清理Metro缓存:
npx react-native start --reset-cache
- 清理Android构建缓存(针对安卓模拟器):
cd android && ./gradlew clean && cd ..
- 重新运行项目:
npx react-native run-android
代码验证
你的导航代码逻辑本身是没问题的,只要版本匹配后,这段代码就能正常运行:
import {NavigationContainer} from "@react-navigation/native" import {createNativeStackNavigator} from "@react-navigation/native-stack"; import WelcomeReactNative from "./screens/WelcomeReactNative.tsx"; const Stack = createNativeStackNavigator() function App(): React.JSX.Element { return ( <NavigationContainer> <Stack.Navigator initialRouteName='WelcomeReactNative'> <Stack.Screen name='WelcomeReactNative' component={WelcomeReactNative}/> </Stack.Navigator> </NavigationContainer> ); } export default App;
备注:内容来源于stack exchange,提问作者AntiRakPro




