1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        經(jīng)常會被問及的 Vue 面試題(上)

        共 8993字,需瀏覽 18分鐘

         ·

        2021-10-17 22:53

        0.前言

        原文有 36 道 vue 常用面試題,考慮到太多一次也看不完,所以分為?上、中、下三篇,如果你能讀完這三篇文章,相信你在面試中 vue 的問題你不會怕了。

        1.頁面中定義一個定時器,在哪個階段清除?

        答案:在 beforeDestroy 中銷毀定時器。

        ① 為什么銷毀它:

        在頁面 a 中寫了一個定時器,比如每隔一秒鐘打印一次 1,當(dāng)我點(diǎn)擊按鈕進(jìn)入頁面 b 的時候,會發(fā)現(xiàn)定時器依然在執(zhí)行,這是非常消耗性能的。

        ② 解決方案 1:

        mounted(){
        this.timer = setInterval(()=>{
        console.log(1)
        },1000)
        },
        beforeDestroy(){
        clearInterval(this.timer)
        }

        方案 1 有兩點(diǎn)不好的地方,引用尤大的話來說就是:

        它需要在這個組件實例中保存這個 timer,如果可以的話最好只有生命周期鉤子可以訪問到它。這并不算嚴(yán)重的問題,但是它可以被視為雜物。

        我們的建立代碼獨(dú)立于我們的清理代碼,這使得我們比較難于程序化的清理我們建立的所有東西。

        方案 2(推薦):該方法是通過$once 這個事件偵聽器在定義完定時器之后的位置來清除定時器

        mounted(){
        const timer = setInterval(()=>{
        console.log(1)
        },1000)
        this.$once('hook:beforeDestroy',()=>{
        clearInterval(timer)
        })
        }

        官網(wǎng)參考鏈接:https://cn.vuejs.org/v2/guide/components-edge-cases.html

        2.父組件如何獲取子組件的數(shù)據(jù),子組件如何獲取父組件的數(shù)據(jù),父子組件如何傳值?

        ① 先說,父組件如何主動獲取子組件的數(shù)據(jù)?

        方案 1:$children

        $children 用來訪問子組件實例,要知道一個組件的子組件可能是不唯一的,所以它的返回值是數(shù)組。

        現(xiàn)在,我們定義 Header,HelloWorld 兩個組件