Fragments

vue3.0支持了多根节点的组件,也就是片段(Fragments)

<template>
  <header>header</header>
  <main>main</main>
  <footer>footer</footer>
</template>

 Fragment好处

1>减少了很多无意义的div
2>实现组件递归

我们定义一个组件fragment.vue

<template>
    <div>
        <honey></honey>
    </div>
</template>

<script>
    export default {
        name:'honey'
    }
</script>
<style scoped>
</style>

app.vue

<template>
   <div>
      <fragment></fragment>
   </div>
</template>

<script>
import fragment from "./components/fragment.vue"
   export default {
      components:{
         fragment
      }
   }
</script>
<style scoped>
</style>

此时浏览器会报错:超出了浏览器最大堆栈,要使用递归组件需要有条件判断

 

 

 因为再这里我们实现的是一个组件的递归,在当前组件中无限制的调用当前的自身,这就成了死递归,要是用递归组件,必须要有条件判断

app.vue

<template>
   <div>
      <fragment :data="[4,1,56,123,4,9,51,3,]"></fragment>
   </div>
</template>

 fragment.vue

<template>
    <horintal :data="leftarr" v-if="leftarr.length"></horintal>
    <div>{{m}}</div>
    <horintal :data="rightarr" v-if="rightarr.length"></horintal>
</template>
<script>
export default {
    name:'horintal',
    props:{
        data:Array
    },
    setup(props){
        // 获取数组中第一个值作为一个中间值
        let m=props.data[0]
        // 存放比m小的值
        const leftarr=[];
         // 存放比m大的值
        const rightarr=[];
        props.data.slice(1).forEach(v=>{
            v>m?rightarr.push(v):leftarr.push(v)
        })
        return {m,leftarr,rightarr}
    }
}
</script>
<style scoped>
</style>

 

posted @ 2021-11-09 09:37  keyeking  阅读(77)  评论(0编辑  收藏  举报