在沒有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
|
參考資料#