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

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

          共 8789字,需瀏覽 18分鐘

           ·

          2020-03-05 23:24

          原文作者:東起

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

          0.前言

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

          1.頁(yè)面中定義一個(gè)定時(shí)器,在哪個(gè)階段清除?

          答案:在 beforeDestroy 中銷毀定時(shí)器。

          ① 為什么銷毀它:

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

          ② 解決方案 1:

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

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

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

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

          方案 2(推薦):該方法是通過(guò)$once 這個(gè)事件偵聽器在定義完定時(shí)器之后的位置來(lái)清除定時(shí)器

          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ù),父子組件如何傳值?

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

          方案 1:$children

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

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