๐ฅ ์ค๋ ์ด๋์ ๋์ ํด๋ณด์ จ๊ณ , ๋ฌด์์ ๋ฐฐ์ฐ์ จ๋์?
- React์
useContext
์ฌ์ฉ๋ฒ (์ฐธ๊ณ )
๐ ํ์ตํ์๋ฉด์ ๊ถ๊ธํ์ ๋ถ๋ถ์ด๋, ์ด๋ ค์ ๋ ์ ์ ๋ญ๊น์?
์ฃผ์์ฌํญ์ Provider์ value prop์ด ๋ฐ๋๋ฉด ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฏ๋ก Provider๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํ์์ ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋ฆฌ๋ ๋๋ง๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ state๋ก ๋์ด์ฌ๋ฆฌ๊ณ ๊ทธ state ๊ฐ์ value prop์ผ๋ก ์ ๋ฌํ๋ค.
1 2 3 4
Object.is({ a: "1" }, { a: "1" }); //false const obj = { a: "1" }; Object.is(obj, obj); // true
๊ฐ์ฒด ๋ด๋ถ ๋ฐ์ดํฐ๋ ๋์ผํ๋๋ผ๋ ๊ฐ๊ฐ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์ํ๋ค.
Provider์ value prop์๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ๋ ๋๋ง ๋ ๋๋ง๋ค ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ ์ฅํ ํ์ ๊ทธ ๊ฐ์ value prop์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
๐ ๋ด์ผ์ ์ด๋ป๊ฒ ํด๋ณด๊ณ ์ถ์ผ์ธ์?
- ์ ๋ฐ๋ฏธ ๋ฆฌ์กํธ ๊ฐ์ 122 ~ 128๊น์ง ์๊ฐํ๊ธฐ (context ์ฌํ)
React์ Context
- context๋ ๋ฆฌ์กํธ ๋ด๋ถ์์ ์ ์ญ์ ์ผ๋ก state๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ฅ์ ๊ฐ๋ ์ด๋ค.
- context๋ฅผ ์ด์ฉํ๋ฉด ๋จ๊ณ๋ง๋ค ์ผ์ผ์ด props๋ฅผ ๋๊ฒจ์ฃผ์ง ์๊ณ (=prop chain์ ๊ตฌ์ถํ์ง ์๊ณ ๋) ์ปดํฌ๋ํธ ํธ๋ฆฌ ์ ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
React.createContext
๋ก Context ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ,Context.Provider
๋ก context๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ ๋ฒ์๋ฅผ ์ ํ์ฌ ๋ฆฌ์กํธ์๊ฒ ์๋ ค์ฃผ๊ณ ๋ด๋ถ ์ปดํฌ๋ํธ๋ค์๊ฒ๋ context์ ๋ณํ๋ฅผ ์๋ฆฐ๋ค.Context.Provider
๋ด๋ถ์ ์๋ ์ปดํฌ๋ํธ๊ฐ ํด๋น context์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋Context.Consumer
๋๋useContext
๋ฅผ ์ฌ์ฉํ๋ค.
React.createContext
1
const MyContext = React.createContext(defaultValue);
์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ฅผ
defaultValue
๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ค.Context.Provider
1 2 3 4 5 6 7
const App = () => { return ( <MyContext.Provider value={providedValue}> <Toolbar /> </MyContext.Provider> ); };
Provider
์ปดํฌ๋ํธ์๋value
๋ผ๋ prop์ ์ ๋ฌํด์ฃผ๋๋ฐ ์ด ๊ฐ์ด ํ์ ์ปดํฌ๋ํธ๋ค์๊ฒ ์ ๋ฌ๋๊ณ ์ดvalue
prop์ด ๋ณํ ๋๋ง๋ค ๋ฆฌ๋ ๋๋ง๋๋ค.์ ์ฝ๋์์
Toolbar
์ปดํฌ๋ํธ๋MyContext.Provider
์ปดํฌ๋ํธ ๋ด๋ถ์ ์์นํ๋ฏ๋กMyContext.Provider
์ ์ ๋ฌ๋๋value
prop์ด ๋ณํ ๋๋ง๋ค ๋ฆฌ๋ ๋๋ง๋๋ค.โ ๏ธ
React.createContext
์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํdefaultValue
๋Provider
๋ฅผ ์ฐพ์ง ๋ชปํ์ ๋๋ง ์ฐ์ด๋ ๊ฐ์ด๋ค.Context.Consumer
1 2 3 4 5 6 7
const Toolbar = () => { return <MyContext.Consumer> {(ctx) => { return (<ul>{...}</ul>) }} </MyContext.Consumer> }
Consumer ์ปดํฌ๋ํธ์ ์์์ ํจ์์ฌ์ผ ํ๋ค. ์ด ํจ์์ ํ๋ผ๋ฏธํฐ๋ context์ ํ์ฌ ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ์ฌ๊ธฐ์
ctx
๋providedValue
๋ฅผ ๊ฐ์ ธ์จ๋ค.useContext
1 2 3 4
const Toolbar = () => { const ctx = useContext(MyContext); return <ul>{...}</ul> }
MyContext.Consumer
์ ๋ง์ฐฌ๊ฐ์ง๋กMyContext.Provider
๋ด๋ถ์์useContext
ํ ์ผ๋ก context์ ์ ๊ทผํ ์ ์๋ค.