如果發現文章有問題也可以在文章下方及時聯絡筆者哦,相互**一起進步~
const context = react.createcontext(defaultvalue)
function contextprovider ()
但是如果沒有對應的context.provider
相匹配,那麼元件樹上的所有元件都可以收到這個context物件發出 的defaultvalue
;
同時可以呼叫context
的consumer
api可以用來接受到context
的值,並且根據這個值渲染元件:
function contextconsumer ()
)}
利用context.consumer
api 可以讓我們即使是在函式式元件也可以訂閱到 context的值;
這種方法需要乙個函式作為子元素,函式接收當前的context值,並返回乙個 react 節點。
傳遞給函式的value
值等價於元件樹上方離這個 context 最近的 provider 提供的variablevalue
值。如果沒有對應的 provider,value
引數等同於傳遞給createcontext()
的defaultvalue
。
// provider 結合 consumer 使用示例
import react from 'react';
import reactdom from 'react-dom';
import './index.css';
// 建立 context 物件
const mycontext = react.createcontext(0) // defaultvalue 是數字0
constructor(props)
// 處理 provider中value變化的函式
this.handlechange = () => ))}
}render()
}// 消費元件
class context extends react.component})
}}reactdom.render(
document.getelementbyid('root')
);
當provider的variablevalue
值發生變化時,它內部的所有消費元件都會重新渲染。
class.contexttype
class myclass extends react.component
}myclass.contexttype = mycontext; //將myclass的contexttype屬性賦值為 context 物件的值
掛載在 class 上的contexttype
屬性會被重賦值為乙個由react.createcontext()
建立的 context 物件。此屬效能讓你使用this.context
來消費最近 context 上的那個值。你可以在任何生命週期中訪問到它,包括 render 函式中。
注: 從文件的字面意思,class.contexttype
是類元件特有的api,所以函式式元件只能使用context.consumer
來訪問context
物件的值,我們可以來試一下類元件和函式式元件的api:import react from 'react';
import reactdom from 'react-dom';
import './index.css';
// 建立 context 物件
const mycontext = react.createcontext(0)
constructor(props)
this.handlechange = () => ))}
}render()
}// class & consumer 消費元件
class context_consumer extends react.component})
}}// class & contexttype 的消費元件
class context_contexttype extends react.component)}
};context_contexttype.contexttype = mycontext;
// 函式元件 & consumer
function func_consumer (props) })
}// 函式元件 & contexttype
function func_contexttype (props)
)}func_contexttype.contexttype = mycontext;
reactdom.render(
document.getelementbyid('root')
);
context.displayname
context 物件接受乙個名為displayname
的 property,型別為字串。react devtools 使用該字串來確定 context 要顯示的內容。
示例,下述元件在 devtools 中將顯示為 mydisplayname:
const mycontext = react.createcontext(/* some value */);
mycontext.displayname = 'mydisplayname';
// "mydisplayname.provider" 在 devtools 中
// "mydisplayname.consumer" 在 devtools 中
對 React Context 的理解以及應用
很多優秀的react元件都通過context來完成自己的功能 在react元件開發中,如果用好context,可以讓你的元件變得強大,而且靈活。簡單說就是,當你不想在元件樹中通過逐層傳遞props或者state的方式來傳遞資料時,可以使用context來實現跨層級的元件資料傳遞。使用props或者s...
React Context和高階元件HOC用法
本文將通過官方例項,組合運用context和高階元件,並給出例項 的方式詳細介紹context 高階元件的概念和用法。在典型的react應用中,資料是通過props屬性一層層的由上向下傳遞。但是對於應用中很多元件都需要使用的值 比如說 頁面的主題,頁面語言選擇 如果還是通過props屬性一層層的傳遞...
新版 react context的寫法
祖元件 import react,from react import cnode from components cnode type propstype type statetype 這裡要匯出這個上下文,下面的子孫元件哪個用到context的東西哪個就引入一下 export const info...