长治推广型网站开发,云南省建设造价协会网站,苏州企业网站公司都有哪些,一个购物网站多少钱1. React15 Diff算法#xff08;递归进行#xff09;
一句话概括#xff1a;新虚拟DOM和旧虚拟DOM对比#xff0c;找出差异#xff0c;根据差异更新真实DOM Diff过程描述#xff1a; 1. 树比较(DOM) 同层节点之间相互比较#xff0c;不会跨层级比较。#xff08;当发现…1. React15 Diff算法递归进行
一句话概括新虚拟DOM和旧虚拟DOM对比找出差异根据差异更新真实DOM Diff过程描述 1. 树比较(DOM) 同层节点之间相互比较不会跨层级比较。当发现节点不存在了则将该节点及其⼦节点全部删除 2. 组件比较(class组件) 不同类型的节点产生不同的树结构。节点的类型相同则按原策略继续比较虚拟DOM节点的类型不同移除老节点创建新节点 3. 元素比较(DOM) 同一层级子节点可以通过 key 来指定那些节点在不同的渲染下保持稳定
2. React16 Diff算法Fiber Reconciler异步可中断
一句话概括React17 Diff算法是新JSX对象跟老Fiber树的对比生成新Fiber的过程 Diff过程描述 1. 单节点比较如果新的子节点JSX只有一个元素的话对应老Fiber是一个或者多个。 1.1 key相同type相同复用老Fiber将老Fiber节点标记为更新 1.2 key相同type不同老Fiber标记删除根据新的JSX生成新的Fiber并标记插入 1.3 key不同将当前老Fiber标记删除继续与老Fiber节点的其他兄弟Fiber进行比较。 2. 多节点比较如果JSX对象是一个数组的话 第一轮遍历依次比较 2.1 依次比较key和type都相同全部可复用 2.2 遇到key相同type不同不可复用则将相应老Fiber节点标记删除根据JSX生成新的Fiber节点 2.3 遇到key不同直接进入第二轮遍历 2.4 如果JSX对象遍历结束或者老Fiber遍历结束进入第二轮遍历 第二轮遍历分四种情况 2.5 JSX对象和老Fiber都遍历完了第二轮遍历直接结束 2.6 JSX对象遍历完了老Fiber没有遍历完将剩下老Fiber节点标记删除 2.7 JSX对象没有遍历完老Fiber遍历完了根据剩下JSX中元素创建新Fiber并标记插入 2.8 JSX对象和老Fiber都没有遍历完根据JSX对象中元素的顺序对老Fiber进行移动。
所有标记effectTag的Fiber节点形成一条单向链表在commit阶段遍历该单向链表根据effectTag更新真实DOM