![剑指Vue3:从入门到实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/329/51090329/b_51090329.jpg)
1.2.3 新的内置组件
Vue3添加了一些新的内置组件,开发人员可以利用它们来解决一些常见的问题,虽然这些组件的功能在Vue2中也同样可以实现,但一般是以第三方插件进行应用的,而Vue3核心团队已经将其添加到新版本的核心框架中。下面简单罗列一些新添加的内置组件。
1.Fragment
在Vue2中,单文件组件的模板中有且只能有一个根标签来包裹多个子标签,对于下面的代码,div元素则不能省略,否则就会有多个根标签,但从页面显示效果来看,如果外层的div元素不包含自定义样式,那么div元素是没有存在的意义的,因此,Vue2的限制导致组件的页面产生了一层标签嵌套。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_18_1.jpg?sign=1738786424-sqytUZrUmvvZXNtJ4QrEpS0JIYsiSq4a-0-0bee48288fd9e89b3c7c1a6af5b5606c)
Vue3提供了Fragment组件来减少组件外层不必要的根标签,我们可以在组件的模板中使用Fragment组件标签来包裹多个子标签,而在组件最终生成的页面中是不包含Fragment组件标签的,示例代码如下。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_18_2.jpg?sign=1738786424-5RORw688uWkF9GFrwuKTD0u8ESlXZQEx-0-d351845fc4f8b1f318f2b9b34a293250)
Vue3提供了对应的简洁语法,可以使用<></>包裹多个子标签来简化代码,示例代码如下。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_18_3.jpg?sign=1738786424-6mGEfd4STbnKYzGxrZqSTlTKUTyiYDHN-0-97e1825e843e1193a63fb9ee1b62f198)
在Vue3的组件中,还可以进一步简化代码,其允许用户在模板中直接编写多个根标签,示例代码如下。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_18_4.jpg?sign=1738786424-i6PFoS6RTAEKCMSUVymw3ocCP4eQggsD-0-f665ddf2a14d77f05cc4a61ca363245d)
2.Teleport
Teleport是瞬移组件,也称为传送门组件,顾名思义,它是一个可以使元素从一个组件转到另一个组件的组件。乍一看这个组件的功能似乎很奇怪,但它有很多的应用场景,如对话框、自定义菜单、警告提示、徽章,以及许多其他需要出现在特殊位置的自定义UI组件。假设现在页面中有两个元素,分别为div元素和button按钮元素,在当前页面中这两个元素是并列元素,代码如下。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_18_5.jpg?sign=1738786424-KA7CEdNRFNzuSYUQPuiOLWY0TcuIqDKv-0-22507387c807e3c24abfa1dd84ad4dab)
但如果想要将button按钮元素放置于div这一目标元素下,则可以直接利用Teleport组件,将button按钮元素内容瞬间移动至目标元素下。例如,设置to属性为“.target-portal”,那么button按钮元素就成了div元素的嵌套子元素,它们不再是并列关系,而是嵌套结构,代码结构如下。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_19_1.jpg?sign=1738786424-uEMdBP7OpuMtKM9Y6wIic2VQusPhw6Oi-0-4005b79881e41a1743909cec135d0e4b)
3.Suspense
当等待数据的时间比开发人员希望的时间要长时,应该如何显示为用户定制的加载器呢?在Vue3中无须自定义代码即可实现,只需要通过Suspense组件管理这一过程。该组件除了可以给定默认加载数据后的渲染视图,还可以设置加载数据时的应急视图。例如,在数据加载过程中,会先显示fallback中加载数据时的应急装置组件;在数据加载完毕后,再显示default中默认的渲染视图组件,代码结构如下。也就是说,在Vue3中,开发人员并不需要关心数据加载的状态,新的Vue组合式API将了解组件的当前状态,而且它能够区分组件是正在加载还是已准备好显示。
![](https://epubservercos.yuewen.com/EBE7EF/30122329607553806/epubprivate/OEBPS/Images/48137_19_2.jpg?sign=1738786424-WHpT5zji6JHqBYcgFHq7HQGaXfOfW5jr-0-bdea71d0bec7612d4ebd7e60de24e2fb)