【发布时间】:2020-03-05 06:35:43
【问题描述】:
在我的代码中,我没有明确使用 componentWillMount,但在运行 webpack 时仍然会看到一些警告。
react-dom.development.js:12386 警告:componentWillMount 已重命名,不推荐使用。有关详细信息,请参阅 https://fb.me/react-unsafe-component-lifecycles。
- 将带有副作用的代码移至 componentDidMount,并在构造函数中设置初始状态。
- 将 componentWillMount 重命名为 UNSAFE_componentWillMount 以在非严格模式下抑制此警告。在 React 17.x 中,只有 UNSAFE_ 名称可以使用。要将所有已弃用的生命周期重命名为新名称,您可以在项目源文件夹中运行
npx react-codemod rename-unsafe-lifecycles。请更新以下组件:foo、bar
我确实运行了建议的npx react-codemod rename-unsafe-lifecycles,但警告并没有消失,只是将其措辞改为
react-dom.development.js:12386 警告:componentWillMount 已重命名,不推荐使用。 [...]
这里,foo 和 bar 都是我们团队编写的自定义组件,也是外部库的一些组件。对 componentWillMount 的 Visual Studio 解决方案的完整搜索没有给我任何结果。有人可以解释一下我做错了什么吗?
我在another question 看到了一条评论说明
componentWillMount没有任何明确的位置,但我确实 [...] 在带有state={ tabindex:0 }的构造函数之后有一行代码我如何将其“移动”到构造函数中?
答案是写
constructor(props) {super(props); this.state = { tabindex:0 }}。有人可以解释一下这里发生了什么吗?我必须在我们的代码中寻找什么样的模式?
更多详情
printWarning @ react-dom.development.js:12386
lowPriorityWarningWithoutStack @ react-dom.development.js:12407
./node_modules/react-dom/cjs/react-dom.development.js.ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings @ react-dom.development.js:12577
flushRenderPhaseStrictModeWarningsInDEV @ react-dom.development.js:25641
commitRootImpl @ react-dom.development.js:24871
unstable_runWithPriority @ scheduler.development.js:815
runWithPriority$2 @ react-dom.development.js:12188
commitRoot @ react-dom.development.js:24865
finishSyncRender @ react-dom.development.js:24251
performSyncWorkOnRoot @ react-dom.development.js:24223
scheduleUpdateOnFiber @ react-dom.development.js:23590
scheduleRootUpdate @ react-dom.development.js:26945
updateContainerAtExpirationTime @ react-dom.development.js:26973
updateContainer @ react-dom.development.js:27075
(anonymous) @ react-dom.development.js:27663
unbatchedUpdates @ react-dom.development.js:24375
legacyRenderSubtreeIntoContainer @ react-dom.development.js:27662
render @ react-dom.development.js:27756
./src/index.tsx @ index.tsx:52
__webpack_require__ @ bootstrap:19
0 @ bundle.js:152632
__webpack_require__ @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ bootstrap:83
相关
【问题讨论】:
-
可能是一个旧的库。堆栈跟踪说明了什么?
-
是的,我在 2.x 版本中使用 antd,但由于架构问题,我无法更改它。 @JoeLloyd 在我的编辑中查看堆栈跟踪。
-
正如乔上面所说的,几乎可以肯定
antd使用cWM。我很好奇更新antd会遇到什么架构问题?关于过时的生命周期方法github.com/ant-design/ant-design/issues/9792 似乎是 github 上的一个未解决问题 -
@DJ2:这是我们的内部架构,不适用于 Antd3。
标签: javascript reactjs react-props