react 中的 context 使用方法

Contex 的 API 在新 react 版本中變動還是很大的,我們這裏通過一個實例爲大家講解一下,如果以前沒有接觸過 context ,也可以藉此機會瞭解一下 context 的強大之處。首先大家要明白一些概念,首先是 react 組件間傳遞數據是通過 props 向下(也就是想子組件傳遞),是單向傳遞的,從父級一層一層地通過 props 地向下傳遞到子子孫孫,有的時候我們組件一層一層的嵌套多層,這樣這種方式一層一層傳遞麻煩,我們可不可以進行躍層傳遞,這就會用到 context。

建是我們創建簡單的登錄登出頁面,

這定義 viewer 變量,未登錄時其爲 null,登錄後爲用戶名,然後創建 logIn 和 logOut 方法分別對應登錄和註銷按鈕。

下面代碼相信大家並不陌生,一看就懂我就不贅述了,值得說是一下 Fragment 這個新特性,他的好處就是不會帶來多餘的 div。

看一下效果

然後我們在實際開發時,會對代碼進行整理,將 LoginForm 拆分出來作爲組件使用,然後再將 LoginForm 放 nav 組件中,這樣從頁面到 LoginForm 組件傳遞數據我們需要跨越 nav 組件,如果將一些變量或方法一層一層傳遞顯得很麻煩,例如先傳給 Nav 組件,然後再傳遞給 LoginForm 組件。

我們這裏就會用到 context  這方法,先我們需要創建一個 context 對象,這個對象提供 provider 和 consumer ,通過名字應該不陌生,我們 java8 就看到類似的 API

然後創建我們 Provider 組件,從名字我們可以看出他是數據提供者,負責定義共享數據,在 Prodiver 組件中  value 屬性用於定義會共享到其包含組件的值,這裏包含 viewer 屬性和 logIn 和 logOut 兩個方法,注意包含子元素的標籤爲<context 名稱.Provider>

然後我們修改剛剛提取出來的組件 LoginForm 在這裏如果我們想使用 context 我們就需要將其內容包含在<context名稱.Consumer> 這對標籤中,標籤接受一個函數,value 作爲值會傳遞過來一遍我們調用

然後在最後調用Nav(包含LoginForm>的組件時,需要用 Provider 標籤包裹一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章