在沒有useContext的情況下,如果我們的元件必須傳遞一個值到很下面的原件,那麼我們需要一層一層的傳遞下去
A -> B -> C -> D
而使用了useContext只要在上層覆蓋後,就可以在子元件直接把值取出
A(useContext, Provider) -- B -- C --> D (Consumer)
Provider#
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
  | 
// App.js
import { createContext } from 'react';
import { useState } from "react";
export const SampleContext = createContext() 
const App = () => {
    const [somevalue, setSomevalue] = useState(true);
    
    return (
        <>
            <SampleContext.Provider value={somevalue}>
              <MyComponent />
            </SampleContext.Provider>
        </>
    );
}
export { App, SampleContext }
  | 
 
1
2
3
4
5
6
7
8
  | 
// MyComponent.js
const MyComponent = () => {
    return (
        <InnerComponent />
    );
}
export default MyComponent
  | 
 
Consumer#
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  | 
// InnerComponent.js
import { SampleContext } from "../App";
const InnerComponent = () => {
    return (
        <SampleContext.Consumer>
            {somevalue => somevalue === true ? "True!" : "False!"}
        </SampleContext.Consumer>
    );
}
export default InnerComponent
  | 
 
可以使用useContext再簡化
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  | 
// InnerComponent.js
import { SampleContext } from "../App";
import { useContext } from "react";
const InnerComponent = () => {
    const somevalue = useContext(SampleContext);
    return (
        <>
            {somevalue === true ? "True!" : "False!"}
        </>
    );
}
export default InnerComponent
  | 
 
參考資料#