μ»΄ν¬λνΈ νΈλ¦¬μ λ°μ΄ν° 곡κΈ
β κ³μΈ΅ ꡬ쑰
- μμ μ¬μ§μ νμ¬ λ§λ€μ΄λ³Έ νλ‘μ νΈμ κ³μΈ΅ ꡬ쑰
<DiaryList/>
λ 3 κ°μ props μ λ°μ§λ§, κ·Έ μ€μ λΉ¨κ°μμΌλ‘ λ κ°λ μμ μ΄ μ¬μ©νμ§ μλ props μ λλ€.- μ λ¬λ§ νλ μ»΄ν¬λνΈκ° μ€κ°μ λ§μ΄ μκΈ°κ² λλ κ²½μ°μλ props μ μ΄λ¦λ λ°κΎΈκΈ°κ° μ΄λ €μμ§κ³ , μ½λ μμ±κ³Ό μμ μ μ μν₯μ λ―ΈμΉκ² λ©λλ€.
- μ΄λ¬ν μν©μ λ§μΉ props κ° λ릴μ²λΌ λ μ νκ³ λ€μ΄κ°λ€κ³ props λλ¦΄λ§ μ΄λΌκ³ λΆλ¦ λλ€.
- λΆλͺ¨μκ²μ μμμΌλ‘λ§ λ°μ΄ν°λ₯Ό μ λ¬νλ λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ μ§ν€λ React μ λ¬Έμ λΌκ³ λ μκ° ν μ μμ΅λλ€.
β Context μ κ°λ
- λͺ¨λ λ°μ΄ν°λ₯Ό κ°μ§κ³ μλ μ»΄ν¬λνΈκ°
Provider
λΌκ³ 곡κΈμ μν μ νλ μμ μ»΄ν¬λνΈμκ² μμ μ΄ κ°μ§κ³ μλ λͺ¨λ λ°μ΄ν°λ₯Ό λ€ μ€λλ€. Provider
μ»΄ν¬λνΈλ μμ μ μμμ ν΄λΉνλ λͺ¨λ μ»΄ν¬λνΈλ€μκ² μ§μ λ°μ΄ν°λ₯Ό μ λ¬ ν©λλ€.
Provider
μ»΄ν¬λνΈμ μμ μ»΄ν¬λνΈλ€λ‘ λ°°μΉλμ΄ ν΄λΉProvider
μ»΄ν¬λνΈκ° 곡κΈνλ λͺ¨λ λ°μ΄ν°μ μ κ·Ό ν μ μλ μ»΄ν¬λνΈλ€μ μμμ λ¬Έλ§₯(Context) μ΄λΌκ³ νν ν©λλ€.
β Context API μ¬μ©λ²
1. Context μμ±
const MyContext = React.createContext(defaultValue);
2. Context Provider λ₯Ό ν΅ν λ°μ΄ν° 곡κΈ
<MyContext.Provider value = {μ μμΌλ‘ μ λ¬νκ³ μ νλ κ°}>
{/* μ΄ Context μμ μμΉν μμ μ»΄ν¬λνΈλ€ */}
<MyContext.Provider>
value
λΌλ props λ₯Ό λ°μμ κ·Έ μμμλ κ°μ{}
μμ μλ μμ μ»΄ν¬λνΈλ€μκ² μ λ¬νκ² λλ κΈ°λ₯ μ λλ€.- κ°μ μ λ¬ λ°μ μ μλ μ»΄ν¬λνΈ μμ μ νμ μμ΅λλ€.
3. κ°μ λ°μμμ μ¬μ© νλ κ²½μ°
App.js
// export νλ μ΄μ λ, λ΄λ³΄λ΄μ€μΌ λ€λ₯Έ μ»΄ν¬λνΈλ€μ΄ μ κ·Όμ΄ κ°λ₯ ν©λλ€.
export const DiaryStateContext = React.createContext();
return (
<DiaryStateContext.Provider value={data}>
<DiaryDispatchContext>
<div className="App">
<DiaryEditor onCreate={onCreate} />
<div>μ 체 μΌκΈ° : {data.length}</div>
<div>κΈ°λΆ μ’μ μΌκΈ° κ°μ : {goodCount}</div>
<div>κΈ°λΆ λμ μΌκΈ° κ°μ : {badCount}</div>
<div>κΈ°λΆ μ’μ μΌκΈ° λΉμ¨ : {goodRatio}</div>
<DiaryList onEdit={onEdit} onRemove={onRemove} />
</div>
</DiaryDispatchContext>
</DiaryStateContext.Provider>
);
DiaryList.js
const DiaryList = ({ onEdit, onRemove }) => {
const diaryList = useContext(DiaryStateContext);
{diaryList}
λ₯Ό μμ νμ΅λλ€.
β μ£Όμν΄μΌ ν μ
- κ° λΏλ§ μλλΌ μν λ³ν ν¨μλ μ¬μ© ν μ μμ΅λλ€.
- νμ§λ§ μ΄λ΄ λ λ μ‘°μ¬ν΄μΌ ν©λλ€.
Provider
λ κ²°κ΅ μ»΄ν¬λνΈ μ λλ€.- μ¦, props μ΄ λ°λλ©΄ μ¬μμ± λ©λλ€.
Provider
κ° μ¬μμ±λλ©΄ λ°μ μ»΄ν¬λνΈκΉμ§ μ¬μμ± λ©λλ€. - λ§μ½
<DiaryStateContext.Provider value={data, μνλ³νν¨μ ...}>
μ΄λ κ² νκ² λλ©΄, data
κ° λ°λ λ λ§λ€ 리λ λλ§μ΄ μΌμ΄λκ² λ©λλ€.- μ΄λ° κ²½μ° Context λ₯Ό μ€μ²©μΌλ‘ μ¬μ© ν μ μμ΅λλ€.
β Context λ₯Ό μ€μ²©μΌλ‘ μ¬μ©
DiaryStateContext
λ μ€μ§data
λ§ κ³΅κΈνκΈ° μν΄μ λ§λ€κ³- μν λ³ν ν¨μ(dispatch) λ₯Ό λ΄λ³΄λ΄κΈ° μν΄μ
DiaryDispatchContext
λ₯Ό λ§λλλ€.
App.js
export const DiaryDispatchContext = React.createContext();
const memoizedDispatches = useMemo(() => {
return { onCreate, onRemove, onRemove };
}, []); // μ¬μμ±λμ§ μκ² λΉ λ°°μ΄ μ λ¬
return (
<DiaryStateContext.Provider value={data}>
<DiaryDispatchContext value={memoizedDispatches}>
<div className="App">
<DiaryEditor onCreate={onCreate} />
<div>μ 체 μΌκΈ° : {data.length}</div>
<div>κΈ°λΆ μ’μ μΌκΈ° κ°μ : {goodCount}</div>
<div>κΈ°λΆ λμ μΌκΈ° κ°μ : {badCount}</div>
<div>κΈ°λΆ μ’μ μΌκΈ° λΉμ¨ : {goodRatio}</div>
<DiaryList />
</div>
</DiaryDispatchContext>
</DiaryStateContext.Provider>
);
DiaryEditor.js
const DiaryEditor = () => {
const { onCreate } = useContext(DiaryDispatchContext);
- props λ₯Ό μ§μ°κ³ ,
{ onCreate}
κ°μ Έμ΅λλ€. DiaryDispatchContext
곡κΈνκ³ μλ κ°μ ν¨μ 3κ°λ‘ μ΄λ£¨μ΄μ§ κ°μ²΄μ΄κΈ° λλ¬Έμ λΉκ΅¬μ‘°ν ν λΉμΌλ‘ κ°μ Έμ΅λλ€.
β μ°Έκ³
'π Front-End > React.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React - Router κΈ°λ³Έ (0) | 2022.10.24 |
---|---|
React SPA & CSR (0) | 2022.10.24 |
useReducer (0) | 2022.10.24 |
μ΅μ ν - useCallback (0) | 2022.10.24 |
μ΅μ ν - React.memo (0) | 2022.10.24 |