<aside> ๐ก
์๋ ๋ด์ฉ์
https://github.com/To-Letter/To-Letter-front ๋ ํฌ์งํ ๋ฆฌ
useContext - ์ปค๋ฐ ๋ฒํธ a15156138a7871b3e7bc616b2153e8f30f05e7d3
๋ฅผ ์์๋ก ์์ฑ
</aside>
react์์ ์ปจํ ์คํธ(Context) ๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๊ฐ์ ์ ์ญ์ ์ผ๋ก ๊ฐ์ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ Hook
์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ๋ถ๋ชจ- ์์ ๊ฐ์ ๊น์ด ์๋ prop ์ ๋ฌ์ ์๋ตํ๊ณ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋๋ก ํจ
useContext
๋์ ๊ตฌ์กฐContext ์์ฑ
์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด React.createContext()
๋ฅผ ํธ์ถํ์ฌ ์ปจํ
์คํธ ๊ฐ์ฒด๋ฅผ ์์ฑ
์ด ์ปจํ ์คํธ ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ์๋นํ๋ ์ปดํฌ๋ํธ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉ
์ปจํ ์คํธ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ react ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ์ด ๊ฐ์ ์ฐธ์กฐ ๊ฐ๋ฅ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ง ์ค์ํ ์์ฑ์ ํฌํจ
Provider
: ๊ฐ์ ์ ๊ณตํ๋ ์ญํ , ๋ฉ๋ชจ๋ฆฌ ์์์ ์ปจํ
์คํธ ๊ฐ์ ์ ์ฅํ๋ ์ญํ Consumer
: ๊ฐ์ ์๋นํ๋ ์ญํ , useContext
๋ฅผ ํตํด ์ปจํ
์คํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๊ฐ๋ฅinterface MenuContextProps {
menuNumber: number;
setMenuNumber: React.Dispatch<React.SetStateAction<number>>;
};
export const MenuContext = createContext<MenuContextProps | undefined>(
undefined
);
Provider๋ก ๊ฐ ์ ๊ณต
์์ฑ๋ ์ปจํ
์คํธ ๊ฐ์ฒด์๋ Provider
์ปดํฌ๋ํธ๊ฐ ํฌํจ๋์ด ์์
์ด Provider
๋ react ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์์์ ์์นํ๋ฉฐ, ์ปจํ
์คํธ์ ๊ฐ ์ค์ ๋ฐ ํด๋น ๊ฐ์ ์์ ์ปดํฌ๋ํธ๋ค์ ์ ๊ณตํ๋ ์ญํ
Provider
๋ value
๋ผ๋ ์์ฑ์ ํตํด ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ค์ , ์ด ๊ฐ์ react ๋ฉ๋ชจ๋ฆฌ ์์ ํ ๋น๋จ
export const MenuProvider: React.FC<{ children: ReactNode }> = ({
children,
}) => {
const [menuNumber, setMenuNumber] = useState<number>(1);
return (
<MenuContext.Provider value={{ menuNumber, setMenuNumber }}>
{children}
</MenuContext.Provider>
);
};
useContext(Consumer
์ญํ **)๋ก ๊ฐ ์๋น**
ํ์ ์ปดํฌ๋ํธ์์ useContext(MyContext)
๋ฅผ ํธ์ถํ๋ฉด React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์ ๊ฐ์ฅ ๊ฐ๊น์ด Provider
๋ฅผ ์ฐพ์ ํด๋น Provider
์ value
๋ฅผ ๊ฐ์ ธ์จ๋ค
์ด ๊ฐ์ React์ ์ํ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง์ ํตํด ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์ต์ ๊ฐ์ ์ฐธ์กฐ
const { menuNumber, setMenuNumber } = useContext(MenuContext)!;
// menuNumber: ํ์ฌ ๋ฉ๋ด ๋ฒํธ
// setMenuNumber: ๋ฉ๋ด ๋ฒํธ ๋ณ๊ฒฝ
Context ๋ณ๊ฒฝ ์ ์๋ ๋ฆฌ๋ ๋๋ง
Provider
์ value
๊ฐ( menuNumber, setMenuNumber)์ด ๋ณ๊ฒฝ๋๋ฉด, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ๋ ์๋์ผ๋ก ๋ฆฌ๋ ๋ ๋จ, ์ด๋ React์ ์ํ ๊ด๋ฆฌ์ ์ ์ฌํ๊ฒ ์๋
์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ value
๊ฐ ๋ณํ ๋๋ง๋ค ์ต์ ๊ฐ์ ๋ฐ๊ฒ ๋จ.
useContext
๋ฆฌ๋๋๋ง**useContext
**๋ React์์ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ
**useContext
**๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋กย props๋ฅผ ์ ๋ฌํ์ง ์๊ณ ๋ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋ค. ํ์ง๋ง,ย context ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฅผ ๊ตฌ๋
ํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ ๊ตฌ์กฐ.
useContext
**๋ ๊ตฌ์กฐ์ context๋ฅผ ๊ตฌ๋
ํ๋ ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๊ฐ ์ ๊ฐ์ ๋ํด ๋ฆฌ๋ ๋๋ง์ ์์.์ด๋ก ์ธํด ๊ตฌ๋
ํ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ค์ ๋ ๋๋ง๋ ์ ์์ผ๋ฉฐ, ๋ฆฌ๋ ๋๋ง ๋ฒ์๋ฅผ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ธฐ ์ด๋ ค์. ์ฆ, ๋ฆฌ๋ ๋๋ง์ ์ต์ ํํ๊ณ ์ถ๋ค๋ฉดย **useMemo
**๋ย **React.memo
**์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํจ.
์ํ ์ ๋ฐ์ดํธ๊ฐ ์์ฃผ ๋ฐ์ํ๊ฑฐ๋ ๊ตฌ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.ย ๋ชจ๋ ๊ตฌ๋ ์ปดํฌ๋ํธ๊ฐ ๋ถํ์ํ๊ฒ ๋ค์ ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์ ๋๋ค.