• vue 父子组件 渲染过程


    vue 的子组件有两种方式:同步和异步,在这两种引入方式下,父子组件加载的顺序也是不一样的。

    同步引入

     import Page from '@/components/page'

    异步引入

    const Page = () => import('@/components/page');
    //  或者:
    const Page = resolve => require(['@/components/page'], page);

    同步引入时生命周期顺序为:

    App.vue

    <template>
      <div id="app">
        <New />  <!-- 子组件一 -->
        <Page /> <!-- 子组件二 -->
        <router-view/>
      </div>
    </template>
    <script>
    import Page from '@/components/page' // 同步方式引入
    import New from '@/components/new'
    export default {
      name: 'App',
      components: {
        Page,
        New
      },
      beforeCreate () {
        console.log('父组件App -------> App beforeCreate')
      },
      created () {
        console.log('父组件App -------> App created')
      },
      mounted () {
        console.log('父组件App -------> App mounted')
      },
      beforeMount () {
        console.log('父组件App -------> App beforeMount')
      }
    }
    </script>
    </script>
     

    New.vue

    <template>
        <div>
            <p>this is a new component</p>
        </div>
    </template>
     
    <script>
    export default {
        name: 'new',
      created () {
        console.log('子组件new ----> new created')
      },
      beforeCreate () {
        console.log('子组件new ----> new beforeCreate')
      },
      mounted () {
        console.log('子组件new ----> new mounted')
      },
      beforeMount () {
        console.log('子组件new ----> new beforeMount')
      }
    }
    </script>

    Page.vue

    <template>
        <div>
            <Job />
            <p>this is a page component</p>
        </div>
    </template>
     
    <script>
    import Job from '@/components/job'
    export default {
        name: 'page',
        components: {
            Job,
        },
        beforeCreate () {
            console.log('子组件page ----> page beforeCreate')
        },
        created () {
            console.log('子组件page ----> page created')
        },
        mounted () {
            console.log('子组件page ----> page mounted')
        },
        beforeMount () {
            console.log('子组件page ----> page beforeMount')
        }
    }
    </script>
    <template>
        <div>
            <p>this is a job component, in page.vue</p>
        </div>
    </template>
     
    <script>
    export default {
        name: 'job',
      created () {
        console.log('孙组件job ------> job created')
      },
      beforeCreate () {
        console.log('孙组件job ------> job beforeCreate')
      },
      mounted () {
        console.log('孙组件job ------> job mounted')
      },
      beforeMount () {
        console.log('孙组件job ------> job beforeMount')
      }
    }
    </script>

    异步引入时生命周期顺序:父组件的beforeCreate、created、beforeMount、mounted --> 子组件的beforeCreate、created、beforeMount、mounted,示例略

  • 相关阅读:
    爬取网页图片
    python 猜数字游戏
    位移运算
    生成随机的名字
    不截半个汉字
    一致性hash的实现
    安装前端脚手架
    什么是快速排序?
    HTML5有趣的标签
    stopPropagation / stopImmediatePropagation
  • 原文地址:https://www.cnblogs.com/zhishiyv/p/15979896.html
Copyright © 2020-2023  润新知