props drilling ์ ํผํ ์ ์๊ณ , ์ด๋์๋ ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก useContext ํ ์ด ์๋ค. ์ํ๊ด๋ฆฌ ๋๊ตฌ๋ ์๋๊ณ , ๊ทธ์ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค!(Redux๋ ์ํ๊ด๋ฆฌ๊น์ง ๊ฐ๋ฅ)
๋ณดํต src/context ํด๋๋ฅผ ๋ฐ๋ก ์์ฑํ๊ณ ๊ทธ ์์ context provider components๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. (App.jsx์ ์จ๋ ๋๊ธดํ์ง๋ง, ๊ณต์ ํด์ผํ๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด App.jsx์ ๋ก์ง์ด ๋๋ฌด ๋ง์์ง๋ ๋ถ์์ฉ์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์)
๋ด๊ฐ ์ฌ์ฉํ ์ปดํฌ๋ํธ ๊ตฌ์ฑ ์์ ์ธ๋ถ
์ ์์ฑํด ์ ๋ณด๋ฅผ ์ ๋ฌํด์ผ ํจ์ ์์ง ๋ง์.
//src/context/MemeContext.tsx
const {createContext,useState} from 'react'
export const MemeContext=createContext(null)
// context๋ฅผ ํ๋ ๋ง๋ค๊ณ Provider๋ก ๋ํํด์ฃผ๋ฉด ์ด๊ฒ์ด ๊ฐ์ผ ๋ชจ๋ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์์ธ์์๋ค.
export const MemeContextProvider=({children})=>{
const [isToggle,setIsToggle]=useState(false)
const value={isToggle,setIsToggle}
return(
<MemeContext.Provider value={value}>{children}</MemeContext.Provider>
)
}
๊ทธ ๋ค์ contextProvider๋ก ์ต์์ App.tsx๋ฅผ ๋ํํ๋ฉด ๋!
// src/App.tsx
import { MemeContextProvider } from './context/MemeContext';
function App() {
return (
<MemeContextProvider>
๋ณธ๋ฌธ์
๋๋ค
</MemeContextProvider>
);
}
export default App;
์ง๊ธ์ isToggle,setIsToggle๋ฐ์ ์์ผ์ง๋ง, ๋ง์ฝ context๋ด ๋จ์ผ๊ฐ๋ง ๋ณ๊ฒฝ๋์๋ค๊ณ ํด๋ ์ ์ฒด ์ปจํ
์คํธ๊ฐ ๊ธฐ์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ํด๋น context๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ปดํฌ๋ํธ๊น์ง ๋ค ๋ ๋๋ง๋๋ฉฐ ํธ์ถ๋๋ค๋ ๋จ์ ์ด ์๋ค. ์ด๋ ํ๋ก์ ํธ์ ์๋์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ง์์ ์ผ๋ก ์
๋ฐ์ดํธ ๋ ์ฌ์ง๊ฐ ์๋ ๋ฐ์ดํฐ๋ context์์ ์ต๋ํ ๋ฃ์ง ๋ง์์ผ ํ๋ค.
isModalOpen,setIsModalOpen ๊ฐ์ ๊ฑธ ๋ฃ์ ๊ฒ ์๋๋ผ (๊ทธ๋์ ์ด์ฌํ App.jsx์ modal ์คํ์ฌ๋ถ context์ ์ง์ด๋ฃ์๋ ๋..๋ฐ์ฑํด...)
const [user,setUser]=useState(null)
const [isAuth,setIsAuth]=useState(false)
์์ ๊ฐ์ด ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ + ๊ฑฐ์ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๋ ๊ฒ๋ค๋ง context ์์ ๋ฃ์ด์ผ ํ๋ค. ๊ทธ ์ธ์ ๊ฑด ์ฐจ๋ผ๋ฆฌ props drilling ํ๋ ํธ์ด ๋ซ๋ค.
๊ทธ๋ฆฌ๊ณ context๋ฅผ ๊ผญ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ํ์๋ ์๋ค. ํ๋ก์ ํธ ๋ด ๋ก์ง์ ์๊ฐํด๋ณด๊ณ ๊ทธ context๊ฐ ํ์ํ ๊ฒ๋ค๋ง ํด๋น context๋ก ๊ฐ์ธ๋ ๋๋ค.(ProfileContext, PostsContext, FriendsContext,...) ๊ทธ์น๋ง ์ด๊ฒ ์ญ์ ๋ถํ์ํ ๋ ๋๋ง์ ์ผ์ผํฌ ์ ์๋ ์ฌ๋ถ๋ ์ด์ฉ ์ ์๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ๊ฒ๋ค์ ์ต์ํํ ํ์๊ฐ ์๋ค!!
๊ทธ๋์ ๋์จ ๋์๋ค ์ค ๋ํ์ ์ธ ์์๊ฐ ๋ฐ๋ก redux, redux-toolkit, recoil, zustand ๋ฑ์ด ์๋ค.