createContext
createContext γ―γγ³γ³γγΌγγ³γγζδΎγΎγγ―θͺγΏεγγ§γγγ³γ³γγ―γΉγγδ½ζγγγγοΏ½?ι’ζ°γ§γγ
const SomeContext = createContext(defaultValue)γͺγγ‘γ¬γ³γΉ
createContext(defaultValue)
createContext γγ³γ³γγΌγγ³γοΏ½?ε€ι¨γ§εΌγ³εΊγγ¦γ³γ³γγ―γΉγγδ½ζγγΎγγ
import { createContext } from 'react';
const ThemeContext = createContext('light');εΌζ°
defaultValue: γ³γ³γγΌγγ³γγγ³γ³γγ―γΉγγθͺγΏεγγ¨γγ«γγοΏ½?δΈοΏ½?γγͺγΌε γ§ε―ΎεΏγγγ³γ³γγ―γΉγγγγγ€γγγͺγε ΄εγ«γ³γ³γγ―γΉγγζγ€ε€γ§γγγγγ©γ«γε€γεΏ θ¦γͺγε ΄εγ―nullγζοΏ½?οΏ½γγΎγγγγγ©γ«γε€γ―γζεΎοΏ½?ζοΏ½?οΏ½γγ¨γγ¦δ½Ώγγγγγγ«ζε³γγγ¦γγΎγγγγγ―ιηγͺε€γ§γγγζιγη΅ιγγ¦γε€εγγΎγγγ
θΏγε€
createContext γ―γ³γ³γγ―γΉγγͺγγΈγ§γ―γγθΏγγΎγγ
γ³γ³γγ―γΉγγͺγγΈγ§γ―γθͺδ½γ―ζ
ε ±γζγ£γ¦γγΎγγγδ»οΏ½?γ³γ³γγΌγγ³γγγ©οΏ½?γ³γ³γγ―γΉγγθͺγΏεγγγγΎγγ―ζδΎγγγγ葨γγΎγγιεΈΈγδΈδ½οΏ½?γ³γ³γγΌγγ³γγ§ SomeContext.Provider γδ½Ώη¨γγ¦γ³γ³γγ―γΉγοΏ½?ε€γζοΏ½?οΏ½γγδΈδ½οΏ½?γ³γ³γγΌγγ³γγ§ useContext(SomeContext) γεΌγ³εΊγγ¦γ³γ³γγ―γΉγγθͺγΏεγγΎγγγ³γ³γγ―γΉγγͺγγΈγ§γ―γγ«γ―γγγ€γοΏ½?γγγγγ£γγγγΎγοΌ
SomeContext.Providerγ§γ―γγ³γ³γγΌγγ³γγ«γ³γ³γγ―γΉγοΏ½?ε€γζδΎγ§γγΎγγSomeContext.Consumerγ―γγ³γ³γγ―γΉγοΏ½?ε€γθͺγΏεγγγοΏ½?ζΉζ³γ§γγγγγΎγδ½Ώη¨γγγΎγγγ
SomeContext.Provider
γ³γ³γγΌγγ³γγγ³γ³γγ―γΉγγγγγ€γγ§γ©γγγγγ¨γε ι¨οΏ½?γ³γ³γγΌγγ³γγ«ε―Ύγγ¦γοΏ½?γ³γ³γγ―γΉγοΏ½?ε€γζοΏ½?οΏ½γ§γγΎγγ
function App() {
const [theme, setTheme] = useState('light');
// ...
return (
<ThemeContext.Provider value={theme}>
<Page />
</ThemeContext.Provider>
);
}props
value: γοΏ½?γγγγ€γοΏ½?ε ε΄οΌζ·±γγ«ι’γγγοΌγ«γγγ³γ³γγΌγγ³γγγ³γ³γγ―γΉγγθͺγΏεγιγ«γζΈ‘γγγε€γ§γγγ³γ³γγ―γΉγοΏ½?ε€γ―δ»»ζοΏ½?εγ«γγγγ¨γγ§γγΎγγγγγγ€γε γ§useContext(SomeContext)γεΌγ³εΊγγ¦γγγ³γ³γγΌγγ³γγ―γγγγγδΈδ½γγ€ζγε ε΄γ«γγε―ΎεΏγγγ³γ³γγ―γΉγγγγγ€γοΏ½?valueγεγεγγΎγγ
SomeContext.Consumer
useContext γεε¨γγεγ«γ―γγ³γ³γγ―γΉγγθͺγΏεγε€γζΉζ³γγγγΎγγοΌ
function Button() {
// π‘ Legacy way (not recommended)
return (
<ThemeContext.Consumer>
{theme => (
<button className={theme} />
)}
</ThemeContext.Consumer>
);
}γοΏ½?ε€γζΉζ³γ―γΎγ εδ½γγΎγγγζ°γγζΈγγγγ³γΌγγ― useContext() γδ½Ώγ£γ¦γ³γ³γγ―γΉγγθͺγΏεγγΉγγ§γοΌ
function Button() {
// β
Recommended way
const theme = useContext(ThemeContext);
return <button className={theme} />;
}props
children: ι’ζ°γ§γγReact γ―γuseContext()γ¨εγγ’γ«γ΄γͺγΊγ γ«γγ£γ¦οΏ½?οΏ½γΎγηΎε¨οΏ½?γ³γ³γγ―γΉγε€γ§ι’ζ°γεΌγ³εΊγγγοΏ½?ι’ζ°γγθΏγγγη΅ζγγ¬γ³γγΌγγΎγγθ¦ͺγ³γ³γγΌγγ³γγγοΏ½?γ³γ³γγ―γΉγγε€ζ΄γγγγ¨γReact γ―γοΏ½?ι’ζ°γεοΏ½?οΏ½θ‘γγUI γζ΄ζ°γγΎγγ
δ½Ώη¨ζ³
γ³γ³γγ―γΉγοΏ½?δ½ζ
γ³γ³γγ―γΉγγε©η¨γγγγ¨γ§γζη€Ίηγ« props γζΈ‘γγγ«γγ³γ³γγΌγγ³γγ«ζ·±γγΎγ§ζ ε ±γζΈ‘γγγ¨γγ§γγΎγγ
γ³γ³γγΌγγ³γοΏ½?ε€ι¨γ§ createContext γεΌγ³εΊγγ¦γγ³γ³γγ―γΉγγ 1 γ€γΎγγ―θ€ζ°εδ½ζγγΎγγ
import { createContext } from 'react';
const ThemeContext = createContext('light');
const AuthContext = createContext(null);createContext γ―γ³γ³γγ―γΉγγͺγγΈγ§γ―γγθΏγγΎγγγγγ useContext() γ«ζΈ‘γγγ¨γ§γγ³γ³γγΌγγ³γγγγ³γ³γγ―γΉγγθͺγΏεγγγ¨γγ§γγΎγοΌ
function Button() {
const theme = useContext(ThemeContext);
// ...
}
function Profile() {
const currentUser = useContext(AuthContext);
// ...
}γγγ©γ«γγ§γ―γγ³γ³γγΌγγ³γγεγεγε€γ―γγ³γ³γγ―γΉγγδ½ζγγγ¨γγ«ζοΏ½?οΏ½γγγγγ©γ«γοΏ½?ε€γ«γͺγγΎγγγγγγγγγ©γ«γοΏ½?ε€γ―ζ±Ίγγ¦ε€γγγͺγγγγγγθͺδ½γ§γ―ε½Ήγ«η«γ‘γΎγγγγ
γ³γ³γγ―γΉγγδΎΏε©γͺοΏ½?γ―γγ³γ³γγΌγγ³γγγεηγͺε€γζδΎγ§γγγγγ§γοΌ
function App() {
const [theme, setTheme] = useState('dark');
const [currentUser, setCurrentUser] = useState({ name: 'Taylor' });
// ...
return (
<ThemeContext.Provider value={theme}>
<AuthContext.Provider value={currentUser}>
<Page />
</AuthContext.Provider>
</ThemeContext.Provider>
);
}γγγ§γPage γ³γ³γγΌγγ³γγ¨γοΏ½?ε
ι¨οΏ½?γγΉγ¦οΏ½?γ³γ³γγΌγγ³γγ―γγ©γγͺγ«ζ·±γγ¦γγζΈ‘γγγγ³γ³γγ―γΉγοΏ½?ε€γγθ¦γγγγ¨γγ§γγΎγγζΈ‘γγγγ³γ³γγ―γΉγοΏ½?ε€γε€ζ΄γγγγ¨γReact γ―γ³γ³γγ―γΉγγθͺγΏεγγ³γ³γγΌγγ³γγεγ¬γ³γγΌγγΎγγ
γ³γ³γγ―γΉγοΏ½?θͺγΏεγγ¨ζδΎγδΎγ«γ€γγ¦γγγ«θͺγ
γγ‘γ€γ«γγοΏ½?γ³γ³γγ―γΉγοΏ½?γ€γ³γγΌγγ¨γ¨γ―γΉγγΌγ
η°γͺγγγ‘γ€γ«γ«γγγ³γ³γγΌγγ³γγεγγ³γ³γγ―γΉγγ«γ’γ―γ»γΉγγεΏ
θ¦γγγγγ¨γγγγγγΎγγγοΏ½?γγγδΈθ¬ηγ«γ―ε₯γγ‘γ€γ«γ§γ³γ³γγ―γΉγγοΏ½?οΏ½θ¨γγΎγγδ»οΏ½?γγ‘γ€γ«γ§γ³γ³γγ―γΉγγε©η¨γ§γγγγγ«γγγγγ«γexport ζγδ½Ώη¨γ§γγΎγοΌ
// Contexts.js
import { createContext } from 'react';
export const ThemeContext = createContext('light');
export const AuthContext = createContext(null);δ»οΏ½?γγ‘γ€γ«γ§οΏ½?οΏ½θ¨γγγγ³γ³γγΌγγ³γγ―γimport ζγδ½Ώη¨γγ¦γγοΏ½?γ³γ³γγ―γΉγγθͺγΏεγ£γγγζδΎγγγγγγγ¨γγ§γγΎγοΌ
// Button.js
import { ThemeContext } from './Contexts.js';
function Button() {
const theme = useContext(ThemeContext);
// ...
}// App.js
import { ThemeContext, AuthContext } from './Contexts.js';
function App() {
// ...
return (
<ThemeContext.Provider value={theme}>
<AuthContext.Provider value={currentUser}>
<Page />
</AuthContext.Provider>
</ThemeContext.Provider>
);
}γγγ―γ³γ³γγΌγγ³γοΏ½?γ€γ³γγΌγγ¨γ¨γ―γΉγγΌγγ¨εζ§γ«εδ½γγΎγγ
γγ©γγ«γ·γ₯γΌγγ£γ³γ°
γ³γ³γγ―γΉγοΏ½?ε€γε€ζ΄γγζΉζ³γθ¦γ€γγγͺγ
γοΏ½?γγγͺγ³γΌγγ―γγγ©γ«γοΏ½?γ³γ³γγ―γΉγοΏ½?ε€γζοΏ½?οΏ½γγΎγοΌ
const ThemeContext = createContext('light');γοΏ½?ε€γ―ζ±Ίγγ¦ε€γγγΎγγγReact γ―γε―ΎεΏγγγγγγ€γγδΈδ½οΏ½?γ³γ³γγΌγγ³γγ§θ¦γ€γγγγͺγε ΄εγ«οΏ½?γΏγγοΏ½?ε€γγγ©γΌγ«γγγ―γ¨γγ¦δ½Ώη¨γγΎγγ
γ³γ³γγ―γΉγγζιοΏ½?η΅ιγ¨γ¨γγ«ε€εγγγγ«γ―γstate γθΏ½ε γγγ³γ³γγΌγγ³γγγ³γ³γγ―γΉγγγγγ€γγ§γ©γγγγΎγγ