React 版本之前的差异
- 16.3: 引入fiber架构
- 16.8: 正式引入hooks
- 17: 垫脚石版本
- 全新的jsx转换 之前解析jsx必须引入react,通过react.creatElement,17之后通过react内部的jsx函数处理
- 事件委托的变更 17之前是委托在document层,17之后放在了container上
- 18: 大量新特性出现,如自动批量处理,非紧急更新,concurrent等
- 正式支持了concurrent模式,
- 自动批量处理,不再受setTimeout、原生事件影响,如果想同步要用到flushSync
- 非紧急更新: transition
- reactDom.render变成createRoot
- 新的hooks,useId,useSyncExternalStore等
react的任务调度机制
React中实现了一个单线程的任务调度器,使用最小堆的数据结构管理这些任务,每次来了新的任务都会放到最小堆任务池
在时间切片内、循环执行任务,如果超时,那么再次重新调度。这样就避免了一些高优先级的任务因为来的晚而迟迟得不到处理的问题,从而提升页面的流畅度
任务执行的顺序取决于他们的优先级与过期时间,所以值越小,证明这个任务越应该先被执行。而单线程任务调度器每次只能执行一个任务,因此采用最小堆的数据结构
react里预定了五个优先级的等级
- immediate 最高优先级,这个优先级的任务应该马上执行不能中断
- userBlocking,比如点击按钮这些用户交互,需要及时得到反馈
- normal,不需要用户立即感受到变化的,比如网络请求
- low,这些任务可以延后,但是最终也需要执行
- idle,可以被无限期延后
类组件的生命周期,以及废除三个老的生命周期的原因
移除掉的生命周期
- componentWillMount
- componentWillUpdate
- componentWillReceiveProps
从16.3起,这三个生命周期将不再被推荐使用,因为这一版本引入了fiber,从stac reconciler=>fiber reconciler,组件的更新时间不再确定,并且可能随时会被打断、中止、那么将要挂载,更新、接收参数这些事情,都将边的不可靠,因此,这些生命周期都成为了UNDAFE,不再建议使用