在React中,我可以这样做:
// parent component
export default (){
return (
<div>
<div>1</div>
<ChildComponent />
<div>5</div>
</div>
);
}
// child component
export default (){
return (
<React.Fragment>
<div>2</div>
<div>3</div>
<div>4</div>
</React.Fragment>
);
};
// compiled html tags in browser .
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
但在Vue中,当我做同样的事情时,有些事情就不同了。
// parent component
<template>
<div>
<div>1</div>
<child-component />
<div>5</div>
</div>
</template>
<script>
import childComponent from 'path/to/childComponent';
export default {
components: { childComponent }
}
</script>
-------------------------------------------------------------
// child component
<template>
<div id='have_to_write_in_vue'>
<div>2</div>
<div>3</div>
<div>4</div>
<div>
</template>
// compiled html tags in browser .
<div>1</div>
<div id='have_to_write_in_vue'>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
<div>5</div>
不同的是'DIV'标签在Vue中不在同一级别。我该如何处理这个问题?
我问这是因为一些错误时,无用的嵌套出现。
8条答案
按热度按时间raogr8fs1#
第2次查看
包Vue-fragment促进了vue 2的无根组件。
第3次查看
Vue 3官方支持多根节点组件(片段)https://v3-migration.vuejs.org/new/fragments.html
ukxgm1gy2#
Vue中缺少第一方片段组件让我抓狂!
我看过X1 M0 N1 X NPM包,但它让我对他们做了多少感到紧张,觉得必须有更好的方法。
我想出了一个非常轻量级的东西...它之所以能工作,是因为功能组件被允许返回多个根节点。
但是,这并不像React那样100%有效。例如,在React中,您实际上可以使用
React.Fragment
作为应用中的根节点。这似乎只适用于Vue中的组件(即:它不能是基本组件的根节点)。使用它...
超级有用...
pvcm50d13#
显然,Vue.js v3现在支持开箱即用的片段:Fragments (Vue.js documentation)
ppcbkaq54#
Vue版本3
正如@dakujem提到的,Vue v3支持开箱即用的多根组件,但是它不支持深度嵌套的片段。
更新:您可以嵌套
<template>
!pkmbmrz75#
对于使用Vue 3 + JSX/TSX的用户,您可以执行以下任一操作:
注意:我使用
@vue/babel-plugin-jsx
来支持JSX/TSX。sqougxex6#
发现这个令人敬畏的指令,并经过战斗测试! https://github.com/privatenumber/vue-frag
来自自述文件:
这与vue片段有何不同?
它们都是为了做同样的事情而设计的。然而,vue-fragment是一个组件,而vue-frag是一个指令。当我看到vue-fragment没有任何测试来确保正确的行为时,我创建了vue-frag。在大小方面,它们都很小,但vue-frag稍小(993B对798B)。
u4vypkhs7#
TLDR:创建组件
Frag.vue
:正如在其他答案中提到的,您可以嵌套
template
,但要注意:您可以执行
v-if
生产:
或
v-for
生产:
但是,如果没有
v-for
或v-if
:它产生了
您可以通过始终使用
v-if="true
来解决这个问题,但它有点不太理想。话虽如此,由于模板中的slot将所有传递的子元素都分散到默认slot中,因此可以创建一个非常简单的组件:
就是这样,把它命名为
Frag.vue
,在你需要的地方导入它,你可以把它和v-if
,v-for
一起使用,或者都不使用。生产:
yiytaume8#
只需使用嵌套的
template
标记来 Package 多个子Vue组件。这将导致