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>

        2020年,vue面試遇到的問題(上)

        共 8789字,需瀏覽 18分鐘

         ·

        2020-03-05 23:24

        原文作者:東起

        原文鏈接:https://zhuanlan.zhihu.com/p/103763164

        0.前言

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

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

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

        ① 為什么銷毀它:

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

        ② 解決方案 1:

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

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

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

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

        方案 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.html88b6ae90cbe1860c5098761be0ca1c75.webp5f03ce2a5c3faf871ece4a5a74af3f96.webp

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

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

        方案 1:$children

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

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