Vue Provide/inject vs React Context


Vue Provide/inject 使用的回顧 Provide/inject 不是響應式的

基本用法:

 

接下來 2 個例子只工作在 Vue 2.2.1 或更高版本。低於這個版本時,注入的值會在 props 和 data 初始化之后得到。 

 

 在 2.5.0+ 的注入可以通過設置默認值使其變成可選項

 

注意點:provide 和 inject 綁定並不是可響應。然而,如果你傳入了一個可監聽的對象,那么其對象的屬性還是可響應的。

 

 

React Context:

主要說明:

Context 提供了一個無需為每層組件手動添加 props,就能在組件樹間進行數據傳遞的方法。

Context 主要應用場景在於很多不同層級的組件需要訪問同樣一些的數據。請謹慎使用,因為這會使得組件的復用性變差。

如果你只是想避免層層傳遞一些屬性,組件組合(component composition)有時候是一個比 context 更好的解決方案。

下面是使用的方法:

步驟1:const MyContext = React.createContext(defaultValue);只有當組件所處的樹中沒有匹配到 Provider 時,defaultValue 參數才會生效。注意:將 undefined 傳遞給 Provider 的 value 時,defaultValue 不會生效;

步驟2:<MyContext.Provider value={/* 某個值 */}> 當 Provider 的 value 值發生變化時,它內部的所有消費組件都會重新渲染。Provider 及其內部 consumer 組件都不受制於 shouldComponentUpdate 函數

步驟3:內層組件 MyClass 訪問 Context 的值,

首先給class設置contextType屬性,值就是React.createContext創建的對象MyClass.contextType = MyContext;(如果你正在使用實驗性的 public class fields 語法,你可以使用 static 這個類屬性來初始化你的 contextType。)

然后內部就可以使用 this.context 訪問了,掛載在 class 上的 contextType 屬性會被重賦值為一個由 React.createContext() 創建的 Context 對象。你可以在任何生命周期中訪問到它,包括 render 函數中。

圖片說明:

步驟1:

    

步驟2:

函數組件使用

函數組件使用可以通過 Consumer 的方式;React.createContext 其實是返回一個對象,對象有一個Consumer的key,const {Provider, Consumer} = React.createContext(defaultValue);

 這個函數接收當前的 context 值,返回一個 React 節點。傳遞給函數的 value 值等同於往上組件樹離這個 context 最近的 Provider 提供的 value 值。如果沒有對應的 Provider,value 參數等同於傳遞給 createContext() 的 defaultValue

 

具體例子:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM