有了useState
和useEffect
已經能夠實現大部分的業務邏輯了,可是React Hooks
中仍是有不少好用的Hooks
函數的,好比useContext
和useReducer
。javascript
在用類聲明組件時,父子組件的傳值是經過組件屬性和props
進行的,那如今使用方法(Function)來聲明組件,已經沒有了constructor
構造函數也就沒有了props的接收,那父子組件的傳值就成了一個問題。React Hooks
爲咱們準備了useContext
。這節課就學習一下useContext
,它能夠幫助咱們跨越組件層級直接傳遞變量,實現共享。須要注意的是useContext
和redux
的做用是不一樣的,一個解決的是組件之間值傳遞的問題,一個是應用中統一管理狀態的問題,但經過和useReducer
的配合使用,能夠實現相似Redux
的做用。html
這就比如玩遊戲時有不少英雄,英雄的最總目的都是贏得比賽,可是做用不一樣,有負責輸出的,有負責抗傷害的,有負責治療的。java
Context
的做用就是對它所包含的組件樹提供全局共享數據的一種技術。react
直接在src
目錄下新建一個文件Example4.js
,而後拷貝Example.js
裏的代碼,並進行修改,刪除路由部分和反作用的代碼,只留計數器的核心代碼就能夠了。redux
import React, { useState , useEffect } from 'react'; function Example4(){ const [ count , setCount ] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={()=>{setCount(count+1)}}>click me</button> </div> ) } export default Example4;
而後修改一下index.js
讓它渲染這個Example4.js
組件,修改的代碼以下。dom
import React from 'react'; import ReactDOM from 'react-dom'; import Example from './Example4' ReactDOM.render(<Example />, document.getElementById('root'));
以後在Example4.js
中引入createContext
函數,並使用獲得一個組件,而後在return
方法中進行使用。先看代碼,而後我再解釋。jsp
import React, { useState , createContext } from 'react'; //===關鍵代碼 const CountContext = createContext() function Example4(){ const [ count , setCount ] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={()=>{setCount(count+1)}}>click me</button> {/*======關鍵代碼 */} <CountContext.Provider value={count}> </CountContext.Provider> </div> ) } export default Example4;
這段代碼就至關於把count
變量容許跨層級實現傳遞和使用了(也就是實現了上下文),當父組件的count
變量發生變化時,子組件也會發生變化。接下來咱們就看看一個React Hooks
的組件如何接收到這個變量。ide
已經有了上下文變量,剩下的就時如何接收了,接收這個直接使用useContext就能夠,可是在使用前須要新進行引入useContext
(不引入是沒辦法使用的)。函數
import React, { useState , createContext , useContext } from 'react';
引入後寫一個Counter
組件,只是顯示上下文中的count
變量代碼以下:post
function Counter(){ const count = useContext(CountContext) //一句話就能夠獲得count return (<h2>{count}</h2>) }
獲得後就能夠顯示出來了,可是要記得在<CountContext.Provider>
的閉合標籤中,代碼以下。
<CountContext.Provider value={count}> <Counter /> </CountContext.Provider>
其實useContext
的用法比之前時簡單不少,既然簡單,就不必講解的那麼難,但願小夥伴這節課都能get到知識點,完善本身的知識體系。
轉自:https://jspang.com/posts/2019/08/12/react-hooks.html