context
提供了乙個無需為每層元件手動新增props
,就能在元件樹間進行資料傳遞的方法。
一般情況下,資料是通過props
屬性自上而下進行傳遞的,但這種做法對於某些型別的屬性是極其繁瑣的,比如主題,這些屬性是應用程式中許多元件都需要的。context
提供了一種在元件之間共享此類值的方式,而不必顯示地通過元件樹逐層傳遞props
。
context
設計目的是為了共享那些對於乙個元件樹而言是 「全域性」 的資料,比如前面提到的主題。在下面**中通過乙個theme
屬性手動調整乙個按鈕元件的樣式:
class
extends
react.component
}function
*******
(props)
/>
<
/div>);
}class
themedbutton
extends
react.component
/>;}
}
使用context
,就可以避免通過中間元素傳遞props
:
// context 可以讓我們無須明確地傳遍每乙個元件,就能將值深入傳遞進元件樹。
// 為當前的 theme 建立乙個 context(「light」為預設值)。
const themecontext = react.
createcontext
('light');
class
extends
react.component
}// 中間的元件再也不必指明往下傳遞 theme 了。
function
*******
(props)
class
themedbutton
extends
react.component
/>;}
}
context
主要應用場景在於很多不同層級的元件需要訪問同樣的一些資料。如果只是想避免層層傳遞一些屬性,元件組合會比context
更好。
const mycontext = react.
createcontext
(defaultvalue)
;
建立乙個context
物件,當react
渲染乙個訂閱了這個context
物件的元件,這個元件會從元件樹中離自身最近的那個匹配的provider
中讀取到當前的context
值。只有當元件所處的樹中沒有匹配到provider
時,其defaultvalue
引數才會生效。
>
每個context
物件都會返回乙個provider react
元件,它允許消費元件訂閱context
的變化。provider
接收乙個value
屬性,傳遞給消費元件,乙個provider
可以和多個消費元件有對應關係。多個provider
也可以巢狀使用,裡面的會覆蓋外層的資料。
當provider
的value
值發生變化時,它內部的所有消費元件都會重新渲染。provider
及其內部的consumer
元件都不受制於shouldcomponentupdate
,因此當consumer
元件在其祖先退出更新的情況下也能更新。
需要注意的是,新舊值的變化通過object.is
一樣的演算法來完成的。
class
myclass
extends
react.component
componentdidupdate()
componentwillunmount()
render()
}myclass.contexttype = mycontext;
掛載在class
上的contexttype
屬性會被重賦值為乙個由react.createcontext()
建立的context
物件。這能讓我們使用this.context
來消費最近context
上的那個值。 React基礎篇 條件 列表
方法一 if else的組合 class logincontrol extends react.component handleloginclick handlelogoutclick render else return reactdom.render document.getelementbyi...
React學習筆記 Redux基礎篇
redux,狀態管理器,將state進行統一的管理,適用於複雜的使用者操作 需要協同的使用者操作 涉及到許可權的網頁 多資料來源等場景。action 顧名思義,動作。需要執行怎樣的操作,action是乙個物件,內部包含了此action的型別和相關資訊,規範的action如下 每次都寫一遍action...
React基礎篇 表單相關
使用 state 和 setstate 來獲取和修改表單元素的value值 calss forminput extends react.component this.changefn this.changefn.bind this changefn event render reactdom.ren...