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

expo-camera移动端网页版触发React无效Hook调用 Expo Go运行正常

结论

你的业务代码不存在无效Hook调用的问题,所有useState、useEffect都定义在函数组件顶层作用域,没有违反Hook使用规则,Expo Go端可以正常运行也可以佐证这一点。

差异原因

为什么Expo Go可以正常运行

Expo Go是预编译的原生运行容器,内置的React版本和你项目依赖的Expo SDK对应React版本完全一致,包括expo-camera在内的所有依赖都会调用同一个React实例,不会出现版本冲突或多副本问题。

为什么Web部署后报错

Web生产构建时出现了React版本冲突,属于Invalid Hook Call错误的典型场景,最可能的原因有两个:

  • 项目依赖的react和react-dom版本不匹配
  • 依赖树中存在多个不同版本的React副本,expo-camera的Web端实现调用了和业务代码不同的React实例,导致触发Hook调用规则校验失败

修复方案

  • 检查package.json中react和react-dom的版本号,确保两者严格一致,比如react@18.2.0必须搭配react-dom@18.2.0使用
  • 执行npm ls react或yarn list react检查是否存在多个React版本,如果出现多版本,可通过npm的overrides字段或Yarn的resolutions字段全局锁定React版本
  • 确认安装的expo-camera版本和当前项目的Expo SDK版本完全匹配,不要跨SDK版本单独升级expo-camera
  • 重新构建Web包前先清除缓存,执行npx expo start --clear后再执行生产构建命令,避免旧依赖缓存引发问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:03