迁移Expo项目至RN 0.71.3后调用useState报空属性读取错误
问题诊断
你遇到的Cannot read property 'useState' of null错误,核心原因是组件导出方式错误,同时存在部分第三方依赖与React 18 + React Native 0.71.3不兼容的潜在问题。
解决方案
1. 修复组件导出(最紧急)
查看你的App.js最后一行:
export default App();
这是直接调用组件函数而非导出组件本身,导致React Hooks(如useState)脱离React渲染上下文执行,触发错误。
修改为正确的组件导出方式:
export default App;
2. 替换/升级不兼容依赖
项目中部分老旧库与React 18生态不兼容,建议调整:
react-native-datepicker:已停止维护,替换为你已安装的@react-native-community/datetimepickerreact-native-check-box:替换为@react-native-community/checkbox或React Native官方CheckBox组件react-native-s3-upload:检查并升级到适配React 18的版本
3. 彻底清理缓存并重建
完成上述修改后,执行以下步骤清除缓存:
- 删除依赖文件:
rm -rf node_modules package-lock.json
- 重新安装依赖:
npx expo install
- 清除Expo缓存并启动:
npx expo start --clear
4. 验证React版本一致性
确保所有依赖的React版本与项目声明的react: ^18.2.0一致,执行命令检查:
npm ls react
若发现依赖引用旧版React,需升级对应依赖或替换为兼容版本。
额外注意事项
- React 18已弃用原生
AppLoading,确保你使用的是expo-app-loading的正确导入方式:
import AppLoading from 'expo-app-loading';
- 将
import 'react-native-gesture-handler';放在App.js最顶部,确保它在其他组件前加载。
内容的提问来源于stack exchange,提问作者Caesar
相关产品推荐
相关产品推荐

