首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React源码学习入门(十二)DOM组件更新流程与Diff算法

DOMComponent完成,而setState后,触发到DOM的更新入口是receiveComponent,源码在src/renderers/dom/shared/ReactDOMComponent.js...key是由组件的key生成的,当我们没有指定key的时候,它是这样: 当我们设置key的时候,它是这样: 它的生成函数位于src/shared/utils/traverseAllChildren.js...它完全是根据相同的key来diff,没设置key的话,其实是通过数组下标来进行(源码位于src/renderers/shared/stack/reconciler/ReactChildReconciler.js...,这个条件是必然的,因为在之前reconcile的时候我们就已经把prevChild更新为nextChild了,除非nextChild是全新节点或者删除节点的情况。...这里所有的操作均会被推到队列里面去,最终通过processQueue来执行,它的源码位于src/renderers/dom/client/utils/DOMChildrenOperations.js

59130
您找到你想要的搜索结果了吗?
是的
没有找到

彻底读懂VUE3 VDOM DIFF - 上

那这个时候我们也不用DOM了,而是自己去定义个js对象,对象中的key:value呢就包括我们属性名与属性值,每个js对象都对应一个DOM节点。...到这里,相信机智的你已经猜到了,这个我们自己定义的js对象就是传说中的屋子,哦,不对,是传说中的VDOM。 最近刚又看完《奇友》,台词里的《传说中的屋子》实在是太洗脑了。...const s1 = i; const s2 = i; const keyToNewIndexMap = new Map(); for (i = s2; i <= e2; i++) { const nextChild...= c2[i]; keyToNewIndexMap.set(nextChild.key, i); } 学过React VDOM DIFF的可以再来思考一个问题,React中也用到了Map,只不过是把...[i] === 0) { mountElement(nextChild.key); } else { // 可能move } } 通过上面的代码,相信大家对mountElement

33820

你不知道的React 和 Vue 的20个区别【源码层面】

render 函数; 3.watcher: 就是执行1.2.3; 4.patch:就是执行 1.2.4 3.AST 和 VNode 的异同 1.都是 JSON 对象; 2.AST 是HTML,JS...VNode 方法一: // 利用createDocumentFragment()创建虚拟 dom 片段 // 节点对象包含dom所有属性和方法 // html // js...console.log(fragment) element.appendChild(fragment);  // 将打包好的文档片段插入ul节点,只做了一次操作,时间快,性能好 方法二: // 用 JS...= nextChildren[name] if (prevChild === nextChild) { // 同一个引用,说明是使用的同一个component,所以我们需要做移动的操作...state 更新,当执行 setState() 时,会将需要更新的 state 浅合并后,根据变量 isBatchingUpdates(默认为 false)判断是直接更新还是放入状态队列; 2.通过js

1.4K31

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券