說說 vue 父子組件加載順序


面試提問:說說 vue 父子組件加載順序

這我知道答案

  1. 父 beforeCreate
  2. 父 created
  3. 父 beforeMount
  4. 子 beforeCreate
  5. 子 created
  6. 子 beforeMount
  7. 子 mounted
  8. 父 mounted

子組件若有 props 的話更新順序是四步,若無的話兩步不觸發父親的鈎子。

  1. 父 beforeUpdate
  2. 子 beforeUpdate
  3. 子 updated
  4. 父 updated

父組件更新順序是

  1. 父 beforeUpdate
  2. 子 deactivated
  3. 父 updated

銷毀過程是

  1. 父 beforeDestroy
  2. 子 beforeDestroy
  3. 子 destroyed
  4. 父 destroyed

再問,如果有多個子組件呢?我不太能確定。

加載多個子元素

回頭寫了一個簡單的vue視圖,父調用子,以下代碼復制可用。

<!DOCTYPE html>
<html>
<head>
    <title>Form Demo</title>
</head>
<body>
    <div id="app">
        <input-group :forms="forms" v-for="(forms, index) in options" :key="index"></input-group>
    </div>

    <!-- Vue.js v2.6.11 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component('input-group', {
            props: ['forms'],
            beforeCreate() {
              console.log('child beforeCreate');
            },
            created() {
              console.log('child created');
            },
            beforeMount() {
              console.log('child beforeMount');
            },
            mounted() {
              console.log('child mounted');
            },
            template: `<div>
                <template v-for="item in forms">
                    <input type="text" v-model="item.data">
                </template>
            </div>`
        })

        let options = []
        for (let i = 0; i < 2; i++) {
            for (let j = 0; j < 2; j++) {
                options[i] = options[i] || [];
                options[i].push({
                    data: '',
                })
            }
            
        }
        var app = new Vue({
            el: '#app',
            beforeCreate() {
              console.log('parent beforeCreate');
            },
            created() {
              console.log('parent created');
            },
            beforeMount() {
              console.log('parent beforeMount');
            },
            mounted() {
              console.log('parent mounted');
            },
            data: {
                options: options,
            },
        })
        window.app = app;
        console.log(app);
    </script>
</body>
</html>

控制台打印結果如下

parent beforeCreate
parent created
parent beforeMount
child beforeCreate
child created
child beforeMount
child beforeCreate
child created
child beforeMount
(2) child mounted
parent mounted

能得出結論,第一個子元素在 beforeMount 后不會直接 mounted,而是進入下一個子元素的 beforCreate。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM