Vue.js 递归组件的数据,包括 props

Posted

技术标签:

【中文标题】Vue.js 递归组件的数据,包括 props【英文标题】:Vue.js recursive component's data including props 【发布时间】:2021-05-22 10:56:34 【问题描述】:

我在 vue.js 中使用递归组件。每个组件都有一个数组,其中一个值作为道具从父组件传递。如何创建数组以正确包含值/道具?

这里是用简化(未经测试)的代码来展示理论问题的细节(我知道这个例子会导致无限递归:-):

我的组件.vue

<template>
  my_array
  <my-component :my_counter="my_array.counter">
</template>

<script>
module.exports = 
  props: ['my_counter'],
  name: 'my-component', 
  data: function () 
    return 
      new_counter: this.my_counter+1,
      my_array: [name: "static name", counter: this.new_counter]
    
  ,
 
</script>

虽然 new_counter 作为 my_counter 属性正确传递给子组件,但 my_array.counter 没有正确更新为新值。

当我直接将 new_counter 作为 my_counter 属性传递时(不使用数组)。它有效。

我想我需要使用某种反应性数据。但是,我找不到具有计算属性、方法等的解决方案...如何使 my_array 由传递的道具更新?

您对解决这个问题有什么建议?

【问题讨论】:

【参考方案1】:

我对 Vue.js 还是很陌生,我在使用它和 Nuxt.js 时也遇到过类似的问题。 虽然,我有一个例子可以帮助你。 你尝试过这样的事情吗?

<template>
  my_array
  <my-component :my_counter="compA()">
</template>

<script>
module.exports = 
  props: ['my_counter'],
  name: 'my-component', 
  computed: 
    compA() 
       const my_counter = this.my_counter ? this.my_counter : []; 
       let my_array = [name: "static name", counter: my_counter];
       return my_array;
    
  
 
</script>

【讨论】:

问题依然存在:此时变量 my_counter 为“未定义”。但是,当显示属性时,变量 my:counter 会正确显示。【参考方案2】:

您的代码的问题是 my_array 在使用道具后进行了初始化,但随后没有更新。 你必须像这样添加一个观察者:

watch: 
  my_counter(value) 
    this.my_array = 
      ...this.my_array,
      counter: value
    
  

【讨论】:

以上是关于Vue.js 递归组件的数据,包括 props的主要内容,如果未能解决你的问题,请参考以下文章

vue.js - 使用原始 json 中的嵌套数组时,递归组件不会更新

vue.js 树菜单 递归组件树来实现

Vue递归组件不渲染

Vue js数组反向导致v-for循环出错

VUE 意淫笔记

Vue.js2.0中子组件修改父组件传递过来的props,并不影响父组件的原始数据