关于react16.7版本之后为什么要废除几个生命周期的思考

928 阅读1分钟

这两天看了点东西,我自问自答自己提出的一个问题。react为什么要废除componentWillmount componentWillUpdate 和componentWillReceiveProps? react分为render phase 和commit phase的,而像componentWillmount componentWillUpdate 和componentWillReceiveProps等几个生命周期函数(包括render)都是属于render phase的,在fiber机制提出前,render phase阶段是不可被打断的(同步渲染),但是同步渲染会有体验问题,比如有几千个组件在渲染时,用户是没办法和浏览器进行交互的(js线程被占用)。在fiber机制提出后,render phase阶段可被打断,被打断后再次执行(优先级别),就会有以上提到的几个生命周期函数被多次调用。所以被废弃掉。componentwillmount 这个生命周期函数之前,有很多程序猿在里面写一些有副作用的code,比如ajax调用,但这种做法react官方是不推荐的。可是又不能禁止。看16.7之后,它推出的新的生命周期getDerivedStateFromProp 函数,就是一个static函数,在里面拿不到this也无法setstate,更符合纯函数的概念。