发生这种情况是因为您的应用程序被包裹在React.StrictMode
.
<React.StrictMode>
<First />
</React.StrictMode>
React 16.* 中为函数式组件引入了严格模式。我们将组件包装在下面React.StrictMode
以识别应用程序中的潜在错误。
StrictMode 有助于保持大型代码库的稳定性,并有助于升级到较新版本的 React。StrictMode 在控制台中记录我们的应用程序可能存在的问题的错误:
React.StrictMode 需要两次触发一些方法和生命周期钩子来解决这些问题:
这些方法可能会被调用多次并且可能产生副作用,因此 React.StrictMode 会触发这些方法两次以检查任何副作用。如果有任何副作用,将记录错误。(副作用:在方法/组件之外更新的东西)
- 构造函数
- componentWillMount(或 UNSAFE_componentWillMount)
- componentWillReceiveProps(或 UNSAFE_componentWillReceiveProps)
- componentWillUpdate(或 UNSAFE_componentWillUpdate)
- getDerivedStateFromProps
- 应该组件更新
- 使成为
- setState 更新器函数(第一个参数)
有可能我们正在使用一些旧的 React 方法和 API,因此 React.StrictMode 识别出并将错误记录到控制台提及,该方法已过时。
- React.StrictMode 仅适用于开发模式,因此无需担心生产。
结论: React 社区提供了 React.StrictMode 来帮助我们的应用程序跟踪变化,我们可以轻松地将我们的应用程序升级到新版本。