91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue的provide/inject如何用

發布時間:2022-03-07 15:26:13 來源:億速云 閱讀:138 作者:iii 欄目:web開發

這篇文章主要講解了“Vue的provide/inject如何用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue的provide/inject如何用”吧!

簡單的可以把provide/inject對比為React的context,都是為了解決跨層級傳遞屬性的不方便而設立的,跟早期的context一樣,一開始provide/inject機制也沒有載入官方文檔,現在雖然已經寫了,但仍是語焉不詳,這就是我寫本文的目的。

Hello World

看一個最簡單的例子,從祖輩組件中拿到傳入下來的顏色值

UI界面如上,很簡單,祖輩組件還提供了一個單選來改變。

<template>

  <div>

    <label for="red">

      紅色

      <input type="radio" id="red" value="red" v-model="color" />

    </label>

    <br />

    <label for="greed">

      綠色

      <input type="radio" id="green" value="green" v-model="color" />

    </label>

    <slot />

  </div>

</template>

先看provide,它可以是一個對象,比如

provide: {

  color: "green"

}

在孫子組件中可以順利的取到這個值,但要注意的是這樣子的寫法是不能返回Vue實例的響應式數據的,當嘗試改為

provide: {

  color: this.color, //訪問不到Vue實例

}

發生錯誤,提示是Uncaught TypeError: Cannot read property 'color' of undefined 。

一般還是用函數的方式,返回一個傳入的對象

provide() {

  return {

    color: this.color,

  };

}

但是color不是響應式的,就是說如果我在祖輩組件里選擇另外一個顏色,在孫子組件里是拿不到更新后的值的,關于非響應式這一點在下一節詳細展開。

inject用來指定一個數組或者一個對象,數組的話就放provide里字段的名稱,而對象的話可以指定

當前實例中的字段名

對應provide里的字段名

默認值或者返回默認值的函數

const Child = {

  inject: {

    foo: {

      from: 'bar',

      default: () => [1, 2, 3]

    }

  }

}

不是響應式

這個跟React的context是不同的,React沒有響應式機制,一旦改變屬性后默認會引發層層的渲染,開發者自己通過shouldComponentUpdate來優化。

官方文檔上明確的說了

provide和inject綁定并不是可響應的。這是刻意為之的。然而,如果你傳入了一個可監聽的對象,那么其對象的 property 還是可響應的。

第一種解決方案是把值轉為函數,記得要用箭頭函數,不然不能正確獲取this

provide() {

  return {

    color: () => {

      return this.color;

    },

  };

}

然后使用時就要變成了函數的調用

<template>

  <div :style="{'color':color()}">傳下來的顏色{{color()}}</div>

</template>

這樣子就帶來一個很明顯的缺點就是由于不是響應式,這個函數將會被調用多次,比如上面模板里有兩個color(),可以在函數里打個斷點,會發現進來兩次。

更好一些的解決方案是把provide所在的Vue實例給傳遞下去,再來改造一下

provide() {

  return {

    color: this,

  };

}

在孫組件里獲得的其實是實例了,所以要多取一層屬性

<template>

  <div :style="{'color':color.color}">傳下來的顏色{{color.color}}</div>

</template>

可以看到很多UI組件庫就是通過這個方式來傳遞屬性的,因為有可能在不確定層級的子組件里要獲得祖組件里的值。

感謝各位的閱讀,以上就是“Vue的provide/inject如何用”的內容了,經過本文的學習后,相信大家對Vue的provide/inject如何用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

津南区| 西华县| 桃江县| 佛教| 应城市| 麟游县| 武夷山市| 潼南县| 民县| 东宁县| 师宗县| 清涧县| 永兴县| 洮南市| 辽宁省| 保德县| 台江县| 云和县| 神农架林区| 治多县| 灵山县| 外汇| 繁峙县| 宜昌市| 巴楚县| 林甸县| 滁州市| 临沭县| 怀宁县| 江源县| 库伦旗| 横峰县| 伊金霍洛旗| 天台县| 泗水县| 准格尔旗| 太原市| 乌鲁木齐市| 延安市| 民权县| 道真|