什么是递归组件?
2021-09-21 12:34:34 大约 1 分钟
组件是可以在它们自己的模板中调用自身的。
递归组件,一定要有一个结束的条件,否则就会使组件循环引用,最终出现的错误,我们可以使用vif="false"作为递归组件的结束条件。当遇到v-if为false时,组件将不会再进行渲染。既然要用递归组件,那么对我们的数据格式肯定是需要满足递归的条件的。ta它需要是一个树状的递归数据。
// tree组件数据
list:[
{
"name": "web1",
cList: [
{"name": "vue" },
{
"name": "react",
cList: [
{
"name": 'javascrict',
cList: [{ "name": "css"}]
}
]
}
]
},
{ "name": "web2" },
{
"name": "web3",
cList: [
{ "name": "javascript" },
{ "name": "css" }
]
},
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<template>
<div>
<ul>
<li v-for="(item,index) in list " :key="index">
<p>{{item.name}}</p>
<tree-muen :list='list'/>
</li>
</ul>
</div>
</template>
<script>
export default {
components: {
treeMuen
},
data() {
return {
list
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
总结
通过props从父组件拿到数据,递归组件每次进行递归的时候都会tree-menus组件传递下一级treeList数据,整个过程结束之后,递归也就完成了,对于折叠树状菜单来说,我们一般只会去渲染一级的数据,当点击一级菜单时,再去渲染一级菜单下的结构,如此往复。那么v-if就可以实现我们的这个需求,当v-if设置为false时,递归组件将不会再进行渲染,设置为true时,继续渲染。
使用递归组件可以封装折叠菜单,可以有效的避免写更多的嵌套html