ReactHooks的原理,有的简

React是实现了组件的前端框架,它支持class和function两种形式的组件。

class组件是通过继承模版类(Component、PureComponent)的方式开发新组件的,继承是class本身的特性,它支持设置state,会在state改变后重新渲染,可以重写一些父类的方法,这些方法会在React组件渲染的不同阶段调用,叫做生命周期函数。

function组件不能做继承,因为function本来就没这个特性,所以是提供了一些api供函数使用,这些api会在内部的一个数据结构上挂载一些函数和值,并执行相应的逻辑,通过这种方式实现了state和类似class组件的生命周期函数的功能,这种api就叫做hooks。

hooks挂载数据的数据结构叫做fiber。

那什么是fiber呢?

我们知道,React是通过jsx来描述界面结构的,会把jsx编译成renderfunction,然后执行renderfunction产生vdom:

在v16之前的React里,是直接递归遍历vdom,通过domapi增删改dom的方式来渲染的。但当vdom过大,频繁调用domapi会比较耗时,而且递归又不能打断,所以有性能问题。

后来就引入了fiber架构,先把vdom树转成fiber链表,然后再渲染fiber。

vdom转fiber的过程叫做reconcile,是可打断的,React加入了schedule的机制在空闲时调度reconcile,reconcile的过程中会做diff,打上增删改的标记(effectTag),并把对应的dom创建好。然后就可以一次性把fiber渲染到dom,也就是


转载请注明:http://www.aierlanlan.com/rzdk/518.html

  • 上一篇文章:
  •   
  • 下一篇文章: