react 虚拟DOM的原理
1、虚拟DOM,就是虚拟节点,通过用一个JS对象表示真实DOM树结构,这个对象就包括标签名,属性,子节点等。然后将其渲染成真是的DOM节点。
2、第一步是模拟,用 JSX 语法写出来的元素其实是一个虚拟节点
1 2 3 | <div id= 'a' > <span class = 'b' >test</span> </div> |
通过转译工具将JSX转换成React.createElement
的结构
1 2 | React.createElement( "div" ,{id: "a" }, React.createElement( "span" ,{ class : "b" } , "test" )) |
最后通过createElement得到一个JS对象即虚拟DOM。
1 2 3 4 5 6 7 8 9 10 11 | { type: 'div' , props: { id: 'a' }, children: [ { type: 'span' , props:{ class : 'b' } children: 'test' }, ] } |
3、将虚拟DOM转换成真实DOM:调用ReactDOM.render(element, container[, callback])
将组件进行渲染(初始参数处理)-->批处理、事务调用-->生成html-->渲染html
总结:React组件的渲染流程
-
使用
React.createElement
或JSX
编写React
组件,实际上所有的JSX
代码最后都会转换成React.createElement(...)
,Babel
帮助我们完成了这个转换的过程。 -
createElement
函数对key
和ref
等特殊的props
进行处理,并获取defaultProps
对默认props
进行赋值,并且对传入的孩子节点进行处理,最终构造成一个ReactElement
对象(所谓的虚拟DOM
)。 -
ReactDOM.render
将生成好的虚拟DOM
渲染到指定容器上,其中采用了批处理、事务等机制并且对特定浏览器进行了性能优化,最终转换为真实DOM
。
参考自链接:https://juejin.cn/post/6844903824683958286
4、虚拟DOM的优点:让DOM操作的整体性能更好,能减少不必要的DOM操作。
5、缺点:react为虚拟DOM创造了合成事件,如果混用合成事件和原生 DOM 事件,有可能会出 bug。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!