组件递归 以及递归后的$emit失效问题

组件递归:

  当组件要渲染的数据有children,并且children中的数据结构和当前数据结构一样,这种重复出现时,要渲染出来,可以用组件的name属性。

//子组件:注意,在子组件中的注册事件必须是和父元素的属性一致,即翠绿色的两个属性名必须一样,递归中子元素中@changeActive就是父元素穿过来的changeActive属性;
<template>
  <ul class="right-list-container">
    <li v-for="(item,index) in list" :key='item.name + index' @click='changeActive(item.name)'>
      {{item.name}}
      <rightList :list="item.children" @changeActive='changeActive' />//通过向子组件的list传值,实现递归
    </li>
  </ul>
</template>

<script>
export default {
  name:'rightList',

  props: {
    list:{
      type: Array,
      default:()=>[]
    }
  },
methods:{
    changeActive(target){
     this.$emit(target)

    },
   
  }
};
</script>

<style lang="less" scoped>
.right-list-container {
  .right-list-container {
    margin-left: 20px;
  }
}
.showName{
  display: inline-block;
  height: 30px;
   100%;
  line-height: 30px;
  font-size: 14px;
}
.active{
  color: red;
}
</style>>

}
//父组件
<template>
  <div class="test-container">
    <rightList :list='list' @changeActive='changeActive(item)'/>
  </div>
</template>

<script>
import rightList from './index';
export default {
  data() {
    return {
      list: [
        {
          name: 'a',
          children: [
            {
              name: 'a-1',
            },
            {
              name: 'a-2',
            },
          ],
        },
        {
          name: 'b',
          children: [
            {
              name: 'b-1',
            },
            {
              name: 'b-2',
            },
          ],
        },
        {
          name: 'c',
        },
      ],
    };
  },
methods:{
changeActive(item){
    console.log(item)
  }

}
  components: {
    rightList,
  },
};
</script>

我疑惑的地方是,当点击了这个子组件,为什么不在该组件中立刻改变他的颜色,而是要去触发父组件的事件