React Native脚本遇componentWillMount废弃警告,求解决方案
解决React Native中componentWillMount弃用警告的方法
嘿,这个警告我之前在Expo项目里也碰到过,别担心,咱们一步步来搞定它~
首先得搞懂这个警告的意思:componentWillMount是React类组件里的旧生命周期钩子,React官方已经把它标记为弃用了,接下来的大版本会彻底移除它,所以推荐用componentDidMount来替代;如果实在需要临时用这个钩子,可以改名为UNSAFE_componentWillMount,但这只是过渡方案哈。
不过你注意到没?警告里提到的ExpoRootComponent、RootErrorBoundary、Text这些组件,大多是Expo或者React Native的内置组件,不是你自己写的,所以咱们得从这几个方向入手解决:
1. 优先升级Expo/React Native版本
这些内置组件还在使用弃用钩子,大概率是因为你当前的Expo或React Native版本比较旧。官方在新版本里已经修复了这些问题,所以最彻底的解决办法就是升级到最新的稳定版:
- 如果你是Expo管理的项目,直接在终端运行:
跟着提示完成升级就行。expo upgrade - 如果是裸React Native项目,就升级
react-native和相关依赖包,比如用npm或yarn更新:npm install react-native@latest # 或者用yarn yarn add react-native@latest
2. 检查并修改你自己的组件
虽然警告里列的是内置组件,但还是要确认下你自己写的类组件里有没有用到componentWillMount。如果有的话:
- 把它替换成
componentDidMount(推荐),因为这个钩子在组件挂载后执行,更安全,而且大部分初始化逻辑放在这里和之前的效果一致; - 如果确实有必须在挂载前执行的逻辑(这种场景很少),可以临时改名为
UNSAFE_componentWillMount,但记得后续要慢慢迁移到新的生命周期或者函数组件的useEffect钩子。
3. 临时屏蔽警告(应急方案)
如果暂时没法升级版本,或者升级后还有残留警告,可以临时屏蔽这个提示:
- React Native 0.62及以下版本用
YellowBox:import { YellowBox } from 'react-native'; YellowBox.ignoreWarnings(['componentWillMount is deprecated']); - React Native 0.63+版本改用
LogBox:
不过这个方法只是“眼不见为净”,还是建议从根源升级版本解决问题哦。import { LogBox } from 'react-native'; LogBox.ignoreLogs(['componentWillMount is deprecated']);
总结一下:最靠谱的解决方式就是升级你的Expo和React Native依赖到最新稳定版,官方会处理内置组件的弃用问题;同时检查自己的代码,把用到componentWillMount的地方替换成推荐的写法。
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

