你可以在Vue中使用空的<></>标签吗?

huangapple go评论89阅读模式
英文:

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

问题

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

我的问题是在Vue中是否也可以使用这种方法我似乎在文档中找不到任何相关信息如果这不可能是否有解决方法
英文:

Where a component has multiple child elements or components, they are supposed to be nested within a single parent tag &lt;div&gt;&lt;/div&gt; for example, but this may not be what I want, React allows the use of empty &lt;&gt;&lt;/&gt; tags in this case, here is an instance:

function Example() {

  return (
    &lt;&gt;
      &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
        &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
          &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
          &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
          &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
          &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
        &lt;/Stack&gt;
      &lt;/RadioGroup&gt;
      &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
        &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
          &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
          &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
          &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
          &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
        &lt;/Stack&gt;
      &lt;/RadioGroup&gt;
    &lt;/&gt;)
}

My question is, can this approach also be used in Vue? I don't seem to find any reference to it in the documentation. If this is not possible, is there a workaround for it?

答案1

得分: 3

我理解的是,你不能直接在Vue中像React中那样使用空标签语法 &lt;&gt;&lt;/&gt;,但有替代方法可以实现类似的效果。

其中一个选项是使用 &lt;template&gt; 组件来包装多个元素,而不向DOM添加额外的标签。&lt;template&gt; 组件不会渲染为HTML标签,允许将元素分组在一起,而不会在结果元素树中添加另一个元素。

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

&lt;template&gt;
   &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
     &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
        &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
        &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
        &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
        &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
     &lt;/Stack&gt;
   &lt;/RadioGroup&gt;
   &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
     &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
        &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
        &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
        &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
        &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
      &lt;/Stack&gt;
   &lt;/RadioGroup&gt;
&lt;/template&gt;

请记住,在Vue中,保持组件的正确结构并确保元素按照Vue的语法规则正确嵌套是非常重要的。

英文:

My understanding is that you cannot directly use the empty tag syntax &lt;&gt;&lt;/&gt; as in React, but there are alternatives to achieve a similar result in Vue.

One option is to use the &lt;template&gt; component to wrap multiple elements without adding an extra tag to the DOM. The &lt;template&gt; component does not render as an HTML tag and allows elements to be grouped together without adding another element to the resulting tree of elements.

Here's an example of how you could use it:

&lt;template&gt;
   &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
     &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
        &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
        &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
        &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
        &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
     &lt;/Stack&gt;
   &lt;/RadioGroup&gt;
   &lt;RadioGroup defaultValue={placement} onChange={setPlacement}&gt;
     &lt;Stack direction=&#39;row&#39; mb=&#39;4&#39;&gt;
        &lt;Radio value=&#39;top&#39;&gt;Top&lt;/Radio&gt;
        &lt;Radio value=&#39;right&#39;&gt;Right&lt;/Radio&gt;
        &lt;Radio value=&#39;bottom&#39;&gt;Bottom&lt;/Radio&gt;
        &lt;Radio value=&#39;left&#39;&gt;Left&lt;/Radio&gt;
      &lt;/Stack&gt;
   &lt;/RadioGroup&gt;
&lt;/template&gt;

> Remember that in Vue, it is important to maintain a proper structure of the
> component and make sure elements are nested
> correctly according to Vue's syntax rules.

答案2

得分: 0

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

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

英文:

about fragments in vue (there is no direct counterpart)
https://blog.logrocket.com/fragments-in-vue-js/

Also there is this https://www.npmjs.com/package/vue-fragment

答案3

得分: 0

在经过几周的对需求的挫折和调试后,我想出了一个非常简单、直接的解决方案,不需要我安装任何第三方库。

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

将其添加为我的 main.js 中的全局组件,以便重复使用

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

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

这样,我可以将 &lt;v-fragment&gt;&lt;/v-fragment&gt; 用作根组件,而不必增加额外的 div,并且可以将任何其他元素或组件直接放置在 &lt;v-fragment&gt;&lt;/v-fragment&gt; 的子元素中。

英文:

After a few weeks of being frustrated at the requirement and tinkering, I came up with a rather simple, straightforward solution that does not require me to install any third-party library.

I created a new component called VFragment

Added it as a global component in my main.js for ease of reusability

The component contained only the template and a default slot:

&lt;template&gt;
    &lt;slot&gt;&lt;/slot&gt;
&lt;/template&gt;

This way, I can use &lt;v-fragment&gt;&lt;/v-fragment&gt; as the root component and not have the bloat of an extra div while having any other elements or components as direct children of the &lt;v-fragment&gt;&lt;/v-fragment&gt;.

huangapple
  • 本文由 发表于 2023年6月15日 02:32:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/76476592.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定