• Vue 递归组件


    什么是递归?

    程序调用自身的编程技巧称为递归( recursion)。

    构成递归需具备的条件:

    • 化繁为简:子问题须与原始问题为同样的事,且更为简单;
    • 出口:不能无限制地调用本身,须有个出口,化简为非递归状况处理。

    以用 JavaScript 求解斐波那契数列作为例子,了解递归。

    斐波那契数列的递推关系:

    JavaScript 代码实现:

    function fibonacci(n) {
        if (n === 0 || n === 1) {
            return n;  // 出口
        }
        return fibonacci(n - 1) + fibonacci(n - 2); // 化繁为简
    }
    

    通过对 JavaScript 代码进行 Debug,可以发现递归最重要的就是:1、化繁为简;2、出口。

    化繁为简就是将问题分解;出口一定要有,如果没有出口或者调用层级过深都会导致 stack overflow
    debug


    什么是递归组件?

    递归组件就是指组件在模板中调用自己。

    递归都需要 化繁为简 和 出口 ,递归组件的化繁为简很简单,只需要指定组件的 name 属性即可;递归组件的出口也很简单,就是通过 v-if 指定递归的终点。

    容器:

    <template>
      <div>
        <recursion :tree="tree"></recursion>
      </div>
    </template>
    
    <script>
    import recursion from '@/components/VueDataStream/recursion.vue'
    export default {
      name: 'HelloWorld',
      data () {
        return {
          tree: [{
            label: '一级 1',
            children: [{
              label: '二级 1-1',
              children: [{
                label: '三级 1-1-1',
                children: [{
                  label: '四级 1-1-1'
                }]
              }]
            }]   
          }]
        }
      },
      components: {
        recursion
      }
    }
    </script>
    

    递归组件:

    <template>
      <ul>
        <li v-for="item in tree" :key="item.label">
          <div>{{item.label}}</div>
          <recursion v-if="item.children" :tree="item.children"></recursion>
        </li>
      </ul>
    </template>
    
    <script>
    export default {
      name: 'recursion',
      props: {
        tree: {
          type: Array,
          default: () => []
        }
      }
    }
    </script>
    

    递归组件有什么用?

    Tree 树形控件

    Cascader 级联选择器

    参考

  • 相关阅读:
    快速开发一个自己的微信小程序
    ES6系列汇总
    数组、Set对象的互相转换
    CORS 跨域
    模板引擎之hogan.js
    Flex 布局语法教程
    ES6 Javascript 实用开发技巧
    几种知名开源富文本编辑器对比
    python 字符串的一些操作
    python os模块一些常用操作
  • 原文地址:https://www.cnblogs.com/aaronzhou001/p/10310384.html
Copyright © 2020-2023  润新知