本文摘自PHP中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于ReactDom.render的详细解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
步骤
1.创建ReactRoot
2.创建FiberRoot和FiberRoot
3.创建更新
render方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
render方法可以传入三个参数包括ReactElement、DOM的包裹节点,和渲染结束后执行的回调方法。
然后验证invariant
验证container是否是有效的Dom节点。
最后返回legacyRenderSubtreeIntoContainer
方法执行后的结果,再来看看这个方法的参数
1 2 3 4 5 6 7 |
|
这里传入五个参数,第一个是parentComponent不存在传入null,第二个是传入container的子元素,第三个是创建ReactRoot的包裹元素,第四个是协调更新的选项,第五个是渲染后的回调方法。
1 2 3 4 5 6 7 |
|
先检验ReactRoot是否存在不存在则执行传入container,
forceHydrate后的legacyCreateRootFromDOMContainer
函数创建一个ReactRoot。forceHydrate在render方法中传入的false,在Hydrate方法中传入的true,主要是为了区分服务端渲染和客户端渲染,true时未复用原来的节点适合服务端渲染,
如果是false则执行container.removeChild(rootSibling)
删除所有的子节点。
然后返回通过new ReactRoot(container, isConcurrent, shouldHydrate)
:
1 2 3 4 5 6 7 8 |
|
在这个方法中调用createContainer
创建root,这个方法从react-reconciler/inline.dom
文件中引入:
1 2 3 4 5 6 7 |
|
在这个方法中又调用了createFiberRoot
方法创建FiberRoot
在创建玩root后执行unbatchedUpdates
更新,传入root。render方法更新:
1 2 3 4 5 6 7 8 9 10 11 |
|
执行updateContainer(children, root, null, work._onCommit);
方法,这个方法最终调用enqueueUpdate
和scheduleWork
,并返回expireTime,这些进行调度算法和进行优先级判断
【相关推荐:react视频教程】
以上就是ReactDom.render的详细解析的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
javascript中使用for...in 和object.keys()枚举对象属性的差异(附代码)
更多相关阅读请进入《javascript》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者