我可以在 vue 中使用空的 <></> 标签吗

Can I use empty <></> tags in vue

提问人:3m1n3nc3 提问时间:6/15/2023 更新时间:7/15/2023 访问量:842

问:

例如,如果一个组件有多个子元素或组件,它们应该嵌套在单个父标签中,但这可能不是我想要的,React 允许在这种情况下使用空标签,这里是一个实例:<div></div><></>

function Example() {

  return (
    <>
      <RadioGroup defaultValue={placement} onChange={setPlacement}>
        <Stack direction='row' mb='4'>
          <Radio value='top'>Top</Radio>
          <Radio value='right'>Right</Radio>
          <Radio value='bottom'>Bottom</Radio>
          <Radio value='left'>Left</Radio>
        </Stack>
      </RadioGroup>
      <RadioGroup defaultValue={placement} onChange={setPlacement}>
        <Stack direction='row' mb='4'>
          <Radio value='top'>Top</Radio>
          <Radio value='right'>Right</Radio>
          <Radio value='bottom'>Bottom</Radio>
          <Radio value='left'>Left</Radio>
        </Stack>
      </RadioGroup>
    </>)
}

我的问题是,这种方法也可以用在 Vue 中吗?我似乎在文档中找不到任何对它的引用。如果这是不可能的,有没有解决方法?

JavaScript ReactJS Vue.js 模板 标签

评论


答:

3赞 Luciano Griffa 6/15/2023 #1

我的理解是,你不能像 React 那样直接使用空标签语法,但在 Vue 中还有其他方法可以实现类似的结果。<></>

一种选择是使用组件包装多个元素,而无需向 DOM 添加额外的标签。该组件不呈现为 HTML 标记,并允许将元素组合在一起,而无需将另一个元素添加到生成的元素树中。<template><template>

以下是如何使用它的示例:

<template>
   <RadioGroup defaultValue={placement} onChange={setPlacement}>
     <Stack direction='row' mb='4'>
        <Radio value='top'>Top</Radio>
        <Radio value='right'>Right</Radio>
        <Radio value='bottom'>Bottom</Radio>
        <Radio value='left'>Left</Radio>
     </Stack>
   </RadioGroup>
   <RadioGroup defaultValue={placement} onChange={setPlacement}>
     <Stack direction='row' mb='4'>
        <Radio value='top'>Top</Radio>
        <Radio value='right'>Right</Radio>
        <Radio value='bottom'>Bottom</Radio>
        <Radio value='left'>Left</Radio>
      </Stack>
   </RadioGroup>
</template>

请记住,在 Vue 中,保持 组件并确保元素嵌套 根据 Vue 的语法规则正确。

0赞 Marek Kamiński 7/12/2023 #2

关于 vue 中的片段(没有直接对应物) https://blog.logrocket.com/fragments-in-vue-js/

还有这个 https://www.npmjs.com/package/vue-fragment

0赞 3m1n3nc3 7/15/2023 #3

在对需求感到沮丧和修补的几周后,我想出了一个相当简单、直接的解决方案,不需要我安装任何第三方库。

我创建了一个名为 VFragment 的新组件

将其添加为全局组件,以便于重用main.js

该组件仅包含模板和默认插槽:

<template>
    <slot></slot>
</template>

这样,我可以用作根组件,而不会有额外 div 的膨胀,同时将任何其他元素或组件作为 .<v-fragment></v-fragment><v-fragment></v-fragment>