javascript - Vue Tree压平数组或递归组件

标签 javascript vue.js vuejs2

大家好,我正在尝试在 Vue 中构建 Tree 组件,我现在有点怀疑我已经构建了一个递归组件,与此类似,但更复杂,带有复选框、拖放等

https://v2.vuejs.org/v2/examples/tree-view.html

但是现在我在网上查看一些示例,它们看起来是通过展平嵌套 json 并从中创建一棵树而制成的

像这个:

https://jsfiddle.net/fernando2684/p0k8szvj/43/

嗨,这里递归构建数组,然后从中构建树

   recursive(obj, newObj, level, itemId, isExpend) {
      let vm = this;

      obj.forEach(function(o) {
        if (o.children && o.children.length != 0) {
          o.level = level;
          o.leaf = false;
          newObj.push(o);
          if (o.id == itemId) {
            o.expend = isExpend;
          }
          if (o.expend == true) {
            vm.recursive(o.children, newObj, o.level + 1, itemId, isExpend);
          }
        } else {
          o.level = level;
          o.leaf = true;
          newObj.push(o);
          return false;
        }
      });
    },

有人能告诉我,这有什么真正的好处吗?我认为它可以更容易维护,并且数组中的所有数据都是 react 性的,因为它只在一个级别中???

最佳答案

这是优化模板中使用的数据的问题。

平面数组

如果您要渲染,使用递归组件将很难实现。

如果您有一个数组,则可以通过 v-for 传递它,最终得到一个包含所有子项的单个组件(无论深度如何) ) 作为直接子代。这使得控制 Action 变得更容易。

嵌套对象

但是,如果您想使用递归缩进的 div,那么使用平面数组会更加困难。

如果您要使用对象,则必须使用递归组件以及需要冒泡的各个父子关系。

<小时/>

选择更适合您的方式,但不要认为优化模板数据比创建更复杂的组件关系更糟糕。

关于javascript - Vue Tree压平数组或递归组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60396304/

相关文章:

javascript - 单击特定字母后如何获得原始状态?

javascript - parent 未收到 Vue.js $emit

javascript - 在 Vuejs 中使用谷歌地图标记集群

javascript - 除了 if/else 语句之外,是否有 "Vue way"来检查空字符串变量?

javascript - 如何使用 Visual Studio(如 IE)在 Chrome 中获得完整的 JavaScript/TypeScript 调试

javascript - 使用 PassportJS 和 dynamoDB 的 Express 应用程序定位到登录页面,没有错误

c# - 如何更新 GridView 页脚模板中标签的值?

javascript - 在javascript上获取数组值空间后的字符

javascript - 在 vue-chartjs 中循环遍历数组

javascript - v-for 之后的 Vue 指令