ComponentWillMount仅会首次触发吗?附Tabs组件相关代码
关于ComponentWillMount的触发时机问题
首先直接给结论:ComponentWillMount确实仅会在组件首次加载(挂载阶段)时触发一次,不会在组件后续的更新流程(比如props变化、state更新)中再次执行。
不过结合你提供的Tabs组件代码场景,需要补充几点说明:
- 你的
MainComponent本身的ComponentWillMount只会在MainComponent第一次被渲染挂载时执行一次,哪怕切换Tabs的标签页,只要MainComponent本身没有被卸载再挂载,它的这个生命周期函数就不会再触发。 - 但如果你的
Tabs组件实现逻辑是:未激活的Tab对应的子组件会被卸载,当切换到该Tab时重新挂载子组件,那么这些子组件的ComponentWillMount会在每次切换到对应Tab时触发(因为子组件经历了卸载再挂载的完整生命周期)。
另外要提醒的是:ComponentWillMount已经被React官方标记为不安全的生命周期函数(从React 16.3版本开始),官方更推荐使用constructor(用于初始化state、绑定事件)或者componentDidMount(用于发起网络请求等副作用操作)来替代它——因为在React的异步渲染模式下,ComponentWillMount可能会被多次调用,容易导致意料之外的问题。
回到你代码里的Tabs用法,要是切换tab时只是更新组件状态而不卸载子组件,那子组件也不会重复触发ComponentWillMount。
内容的提问来源于stack exchange,提问作者SuicideSheep
相关产品推荐
相关产品推荐

