<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 8993字,需瀏覽 18分鐘

           ·

          2021-10-17 22:53

          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.html

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

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

          方案 1:$children

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

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