我对React对帐的理解正确吗?

时间:2020-11-01 04:55:44

标签: javascript reactjs

根据我整天浏览不同教程所收集的内容,看来React对dom执行更新的方式就是通过以下过程。

  1. 用户通过触发DOM事件的某种方式与真实DOM进行交互,并且事件的处理程序最终触发一个函数,该函数告知对更新的反应。
  2. React拍摄虚拟dom的“快照”(此时也代表真实dom),然后继续创建具有更新状态和道具的新虚拟dom。
  3. React将快照和新的虚拟dom进行比较,然后仅修改需要修改的dom部分以匹配新的虚拟dom。

至少在一个简单的层面上,我对这个过程的理解是否正确?

1 个答案:

答案 0 :(得分:0)

这几乎是正确的,我认为这里的错误是没有“新的虚拟DOM”,React 总是保存/使用/重复使用两个副本-真实DOM的VDOM表示形式。

  • A)VDOM,有助于对真实DOM进行更改(根据此VDOM,React将对DOM进行最小的更改)。

  • B)VDOM,代表对真实DOM所做的所有更改(您称之为“快照”,该VDOM将与A进行比较)。

因此,像您一样总结过程:

  1. 如果VDOM不存在,请创建一个(VDOM A)。
  2. 用户通过触发DOM事件的某种方式与真实DOM进行交互,并且事件的处理程序最终触发一个函数,该函数告知对更新的反应。
  3. React创建(或重用)其中一个VDOM(B)(在这一点上它也代表了真实的dom)。
  4. 使用Vstrong B与VDOM A进行差异比较,然后仅修改需要修改的VDOM部分(A)。
  5. React使用VDOM A更新实际DOM。

3.部分的注意事项React使用diff algorithm,这只是比较元素的keys和props(浅比较)。