react๋ 16.3 ๋ฒ์ ๋ถํฐ ์ ์์ ์ผ๋ก context api (opens new window)๋ฅผ ์ง์ํ๊ณ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ์ ์์๊ฐ props๋ฅผ ๋ ๋ ค state๋ฅผ ๋ณํ์ํค๋ ๊ฒ๊ณผ๋ ๋ฌ๋ฆฌ context api๋ ์ปดํฌ๋ํธ ๊ฐ ๊ฐ๊ฒฉ์ด ์์ต๋๋ค. ์ฆ, ์ปดํฌ๋ํธ๋ฅผ ๊ฑด๋๋๊ณ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ state, function์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์กํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ณธ ์์น์ ๋จ๋ฐฉํฅ์ฑ์ ๋๋ค. ๊ทธ ๋ง์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
๋จ๋ฐฉํฅ์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ ๋์ด๊ณ ํ๋ฆ์ ๋จ์ํํ๋๋ฐ ์ ์ฉํ์ง๋ง ๋๋๋ก ๋๋ฌด ๋ง์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค๋ ๋ฌธ์ ์ ์ ์ผ๊ธฐํ๊ธฐ๋ ํฉ๋๋ค.
์๋ฅผ๋ค์ด 5๋จ๊ณ ์๋์ ์์นํ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ผ ํ๋ค๋ฉด, ์ค๊ฐ์ 4๊ฐ์ ์ปดํฌ๋ํธ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์์์ง๋ผ๋ props๋ฅผ ๊ณ์ํด์ ๋๊ฒจ์ค์ผํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ๋ํ, ํ์ ๊ด๊ณ๋ ํน์ ๋ฒ์ ์์ ์๋ ์ปดํฌ๋ํธ๋ค์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๊ธฐ ์ํด์๋ ๋ ๋ณต์กํ ์ํฉ์ด ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค.
์ปดํฌ๋ํธ์ ๊ตฌ์กฐ๋ฅผ ์ ์ค๊ณํ๊ณ ํฉ์ฑ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ๋๊ฒจ์ค์ผ ํ๋ ์ํฉ์ ์๋ง๋๋ ๊ฒ์ด 1์ต์ ์ด์ง๋ง, ํด๋น ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ์ด ์๋ ๋๋ Context API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Context API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ณต์ ํ Context๋ฅผ ๋ง๋ค์ด์ค์ผ ํฉ๋๋ค. Context๋ createContext ๋ผ๋ ํจ์๋ฅผ ํตํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
const UserContext = createContext(null);
- createContext ํจ์๋ฅผ ํธ์ถํ๋ฉด Context ๊ฐ์ฒด๊ฐ ๋ฆฌํด๋ฉ๋๋ค.
- ํจ์๋ฅผ ํธ์ถํ ๋๋ defaultValue๋ฅผ ์ธ์๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
์ด๋ defaultValue๋ Context Value์ ์ด๊ธฐ๊ฐ์ด ์๋, ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ Context์ ์ ๊ทผํ๋ ค๊ณ ํ์ง๋ง Provider๋ก ๊ฐ์ธ์ ธ ์์ง ์์ ์ํฉ์์ ์ฌ์ฉ๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
๋ง๋ค์ด์ง Context๋ฅผ ํตํด์ ํน์ ํ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด์๋ Provider ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.
Context ๊ฐ์ฒด์๋ Provider๋ผ๋ ํ๋กํผํฐ๊ฐ ์์ผ๋ฉฐ ์ด๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๋๋ค.
Provider ์ปดํฌ๋ํธ๋ value๋ผ๋ props์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, value์ ํ ๋น๋ ๊ฐ์ Provider ์ปดํฌ๋ํธ ํ์์ ์๋ ์ด๋ค ์ปดํฌ๋ํธ๋ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
const UserContext = createContext(null);
const user = {name: "mhh"};
<UserContext.Provider value={user}>
<Child />
</UserContext.Provider>
Class ์ปดํฌ๋ํธ์์ Context๋ฅผ ํตํด ๊ณต์ ๋ ๊ฐ์ ์ ๊ทผํ๋ ค๋ฉด, Consumer๋ผ๋ ๋ค์ ๋ณต์กํ ๋ฐฉ์์ ํตํด์ ์ ๊ทผํด์ผ ํฉ๋๋ค. ํ์ง๋ง ํจ์ ์ปดํฌ๋ํธ์์๋ useContext๋ผ๋ ๋ด์ฅ Hook์ ์ด์ฉํด Context Value์ ์ ๊ทผํ ์ ์์ต๋๋ค.
const UserContext = createContext(null);
const user = {name: "mhh"};
<UserContext.Provider value={user}>
<Child />
</UserContext.Provider>
function Child() {
const user = useContext(UserContext);
return <h1>{user.name}</h1>
}
-
Context ์ Redux ๋ ๊ฐ์ ์ผ์ ํ๋?
๋์ ๋ค๋ฅธ ๋๊ตฌ์ด๋ฉฐ, ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์๋ค.
-
Context ๋ ์ํ๊ด๋ฆฌ ๋๊ตฌ์ธ๊ฐ?
์๋๋ค. Context API ๋ ๋จ์ง ์ข ์์ฑ ์ฃผ์ ์ ํ ํํ์ผ๋ฟ ์๋ฌด๊ฒ๋ ๊ด๋ฆฌํ์ง ์๋๋ค. ์ํ๊ด๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก useState ์ useReducer ๋ฅผ ํตํด ์ผ์ด๋๋ค.
-
useReducer ๋ Redux ์ ๋์ฒดํ์ธ๊ฐ?
๊ทธ๋ ์ง ์๋ค. ์ ์ฌํ ๋ถ๋ถ๋ค์ด ์์ง๋ง ๊ธฐ๋ฅ์๋ ํฐ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
-
์ธ์ Context ๋ฅผ ์ฌ์ฉํด์ผํ๋?
props drilling ์ ํผํ๊ณ ์ ํ ๋
-
์ธ์ Context ์ useReducer ๋ฅผ ์ฌ์ฉํด์ผ ํ๋?
ํน์ ์ปดํฌ๋ํธ์์ ์ด๋์ ๋ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๊ฒฝ์ฐ
-
Redux ๋ ์ธ์ ์ฌ์ฉํด์ผํ๋
- ์ฌ๋ฌ ์์น์ ๋ง์ ์์ ์ํ ๊ฐ์ด ์กด์ฌ ํ ๋
- ์ ๋ฐ์ดํธ ๋ก์ง์ด ๋ณต์ก ํ ๋
- ๊ฑฐ๋ํ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ์ฌ๋์ด ์์ ํ ๋
- ์ํ ๋ณ๊ฒฝ ์๊ฐํ๊ฐ ํ์ ํ ๋
- ์ฌ์ด๋์ดํํธ, ๋ฉ๋ชจ์ด์ ์ด์ , ๋ฐ์ดํฐ ์ง๋ ฌํ๋ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด ํ์ ํ ๋