严格模式
StrictMode(React.StrictMode
),本质是一个组件,该组件不会进行UI渲染,它的作用是在渲染内部组件时,发现不合适的代码
- 识别不安全的生命周期 (比如旧版生命周期被淘汰的componentWillMount)
- 使用过时字符串refAPI的警告
- 使用废弃的findDOMNode方法的警告
- 检测意外的副作用(除了函数副作用的三点还有改变参数值和调用setState)
- 检测过时的context API (比如 childContextTypes)
严格模式无法自动检测出具有副作用的代码,因此
在严格模式下(开发阶段),组件的生命周期会被调用两次,以此来明显化副作用代码
注意: 在React17中,React会自动修改
console.log
方法,在第二次调用生命周期函数时,将会静默输出
在React18中,React将不会抑制任何日志,如果你安装了devtools,第二次输入将会被淡化,在devtools工具中可以屏蔽第二次输出
还要注意一下,由于componentDidMount等函数会被放入执行队列,所以就算关闭了第二次输出,函数里面的打印在严格模式下还是会输出两次