关于vue2的单个根节点

1,011 阅读1分钟

在使用vue2的时候 ,我们都知道在template里面只能有一个根元素。 首先 ,template是原生html就是支持的,它会被解析 但不会被渲染到页面上也就是不会挂到dom上, 就像一个文档碎片fragment一样,在需要的时候可以取获取它。vue中也是类似的操作,只不过还会进一步特殊处理。那么为啥碎片里面必须有一个根节点。\ 我们先犯个错,来两个根节点, 那么vue在解析template的时候,是需要传入一个el:'',去作为入口元素的, 它内部用的就是querySelector这个方法只会获取到一个元素。那么其余元素就会被忽略。组件vue.component实际上也是返回一个vue实例 ,因此组件里的template 也只能一个根元素,如果有多个,如何判断哪些元素是一个组件里的,递归遍历dom进行一些操作, 就会变得复杂化。

vue3在生成组件虚拟dom的时候额外加了一个虚拟节点,也就是fragment 文档碎片,作为整个组件的根节点,说它是虚拟节点 因为它并不真实对应dom的节点,这样入口的问题也就解决了。虽然,dom上没有这个根节点,但是在我们数据逻辑层里有,就根据这个来区分组件。