如果我们试图创建一个没有根节点的Vue模板,比如这样:
<template>
<div>Node 1div>
<div>Node 2div>
template>
我们就会收到编译或运行时错误,因为模板必须具有单个根元素。
通常,我们通过在最外层包裹一层 div
来解决这个问题,但这个div
元素一般没有啥使用,就是让模板符合单根需求。
<template>
<div>
<div>Node 1div>
<div>Node 2div>
div>
template>
这样的方式通常问题不在,但是在某些情况下,拥有多根模板是必要的。在本文中,我们来探讨一下何时需要以及如何解决多根的问题。
渲染数组
某些情况下,可能需要组件渲染子节点数组以包含在父组件中。
例如,一些CSS特性需要非常特殊的元素层次结构才能正确工作,比如CSS grid
或flex
,不能在父元素和子元素之间使用包装器。
<template>
<div style="display:flex">
<FlexChildren/>
div>
template>
还有一个问题,在组件中添加包装元素可能会导致渲染无效的HTML。例如,如果要构建table,则表行必须仅具有用于子项的表单元格
。
<template>
<table>
<tr>
<TableCells/>
tr>
table>
template>