概念
React 用 JS 对象来模拟 DOM 节点,然后将其渲染成真实的 DOM 节点。
用 JSX 语法写出来的 div 其实就是一个虚拟节点:
<div id="x">
<span class="red">hi</span>
</div>
上述代码会得到这样一个对象:
{
tag: 'div',
props: { id: 'x' },
children: [
{
tag: 'span',
props: { className: 'red' },
children: [ 'hi' ],
}
]
}
如果节点发生变化,并不会直接把新虚拟节点渲染到真实节点,而是先经过 diff 算法得到一个 patch 再更新到真实节点上。
优点
DOM 操作性能问题。通过虚拟 DOM 和 diff 算法减少不必要的 DOM 操作,保证性能不太差。(将多个 DOM 操作合并、未发生变化的 DOM 节点不重新渲染)
为 React 带来了跨平台能力,因为虚拟节点除了渲染为真实节点,还可以渲染为其他东西。
网友评论