props์ contextprops๋ก ์ ๋ฌprops๋ก ์์์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌcontextAPIcontext ์ฌ์ฉํด๋ณด๊ธฐprops๋ก ์์์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ
props์ context
์ด๋ฒ ์๊ฐ์๋ useContext์ ๋ํด์ ์์๋ด
์๋ค!
ย

ย
๋ณดํต ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค ๋ props๋ฅผ ํตํ์ฌ ๋๊ฒจ์ค๋๋ค. ์์ ๊ทธ๋ฆผ์ ์ดํด๋ณผ๊น์?
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ ค๋ฉด props๋ก ๊ฐ์ ๋๊ฒจ์ฃผ๊ณ ์์ ์ปดํฌ๋ํธ๋ props๋ฅผ ํตํด ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ค ๋๋ ์ด๋ป๊ฒ ์ ๋ฌํ ๊น์? ์์์๊ฒ ์ ๋ฌํด์ค ๋ฐฉ๋ฒ ๊ทธ๋๋ก, ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ props๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ณ , ์์ ์ปดํฌ๋ํธ๋ ์์ ์ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค๋๋ค.
- ์์ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋๊ฒจ์ฃผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋๊ฐ์ด ์ปดํฌ๋ํธ๋ค์๊ฒ props๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ค๋๋ค.
ย
๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ์์์๊ฒ props๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ณ , ์์์ ๋ ์์์๊ฒ props๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋์ฃ !
์์ ํ๋ก์ ํธ์์๋ props ์ ๋ฌ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ๊ฐ ์ปค์ ธ์ ๋ถ๋ชจ๊ฐ n๋ฒ์งธ ์์์๊ฒ ๋๊ฒจ์ค์ผ ํ๋ค๋ฉด n-1๊ฐ์ ์์์๊ฒ props๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค. ๋จ์ง ์ ๋ฌ์ ์ํด์ ๋ง์ด์ฃ ! ๊ณ์ํด์ ๋ถํ์ํ props๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ ์๋ฏธ ์๋ ๊ฐ๋ค์ด ์ปดํฌ๋ํธ๋ค์ ์ค์ณ๊ฐ๊ฒ ๋ฉ๋๋ค.
ย
์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก context์
๋๋ค!
context๋ props๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ก ํด์ค๋๋ค. props๋ฅผ ์ฌ์ฉํ์ง ์๊ณ n๋ฒ์งธ ์์์๊ฒ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋ด์ค๋๋ค. n-1๊ฐ์ ์์์ ํต๊ณผํ์ฌ n๋ฒ์งธ ์์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ง ์์๋ ๋ถ๋ชจ์์ ๋ฐ๋ก n๋ฒ์งธ ์์์๊ฒ ๊ฐ์ ์ ๋ฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
props์ ๋ํ ์ ์ญ ๋ฐ์ดํฐ ์ ์ฅ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
ย
props๋ก ์ ๋ฌ
import React from "react"; const App = () => { return ( <HelloLicat value={{ name: "gary", id: "garyIsFree" }} /> ); }; const HelloLicat = (props) => { const id = props.value.id; const name = props.value.name; return ( <div> <h2>{id}</h2> <strong>{name}</strong> </div> ); }; export default App;
props๋ก ์์์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ
import React from "react"; const App = () => { return ( <HelloLicat value={{ name: "gary", id: "garyIsFree" }} /> ); }; const HelloLicat = (props) => { const id = props.value.id; const name = props.value.name; return ( <div> <h2>{id}</h2> <strong>{name}</strong> <HelloLicatTwo value={{ id, name}}/> </div> ); }; const HelloLicatTwo = (props) => { const id = props.value.id; const name = props.value.name; return ( <div> <h2>Two : {id}</h2> <strong>Two : {name}</strong> </div> ); }; export default App;
contextAPI
context ์ฌ์ฉํด๋ณด๊ธฐ
1) Context ์์ฑ
createContext๋ก context๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ์ ์ ๋ฌํด์ค ์ปดํฌ๋ํธ์
Context.Consumer
ํ์์ผ๋ก ๊ฐ์ธ์ฃผ๊ณ UserInfo ์์ ์๋ Consumer๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํตํด value ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.import React, { createContext } from "react"; const UserInfo = createContext({ name: "gary", id: "garyIsFree" }); const App = () => { return ( <HelloLicat/> ); }; const HelloLicat = () => { return ( <UserInfo.Consumer> {(value) => ( <div> <h2>{value.name}</h2> <strong>{value.id}</strong> </div> )} </UserInfo.Consumer> ); }; export default App;
props๋ก ์์์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ
import React, { createContext } from "react"; const UserInfo = createContext({ name: "gary", id: "garyIsFree" }); const App = () => { return ( <HelloLicat/> ); }; const HelloLicat = () => { return ( <UserInfo.Consumer> {(value) => ( <div> <h2>{value.name}</h2> <strong>{value.id}</strong> <HelloLicatTwo/> </div> )} </UserInfo.Consumer> ); }; const HelloLicatTwo = () => { return ( <UserInfo.Consumer> {(value) => ( <div> <h2>{value.name}</h2> <strong>{value.id}</strong> </div> )} </UserInfo.Consumer> ); }; export default App;
2) Context.Provider๋ก ๊ฐ ๋ณ๊ฒฝํ๊ธฐ
import React, { createContext } from "react"; const UserInfo = createContext({ name: "gary", id: "garyIsFree" }); const App = () => { return ( <UserInfo.Provider value={{ name: "Licat", id: "ImLion" }}> <HelloLicat /> </UserInfo.Provider> ); }; const HelloLicat = () => { return ( <UserInfo.Consumer> {(value) => ( <div> <h2>{value.name}</h2> <strong>{value.id}</strong> <HelloLicatTwo/> </div> )} </UserInfo.Consumer> ); }; const HelloLicatTwo = () => { return ( <UserInfo.Consumer> {(value) => ( <div> <h2>{value.name}</h2> <strong>{value.id}</strong> </div> )} </UserInfo.Consumer> ); }; export default App;
HelloLicat์ UserInfoContext.Provider๋ก ๊ฐ์ธ์ ๊ฐ์ ์ ๋ฌํ๋ฉด consumer๋ก ์ ๋ฌ๋๋ value ๊ฐ์ด ๋ฐ๋๋๋ค.
ย
๋ค๋ฅธ ๊ฐ๋ค๋ ๋ฃ์ด๋ณด์ธ์!
<UserInfo.Provider value={{ name: "ali", id: "nodeMaster" }}>
ย
์ด๋, Provider๋ก ๊ฐ์ ์ ๋ฌํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ผญ value๋ฅผ ๋ฃ์ด์ผ ํฉ๋๋ค.
const App = () => { return ( <UserInfoContext.Provider> <HelloLicat /> </UserInfoContext.Provider> ); }; // ERROR ๋ฐ์