[useContext]
useContext 를 통해 전역으로 데이터를 관리할 수 있음. (데이터의 중앙저장소)
기존에는 부모 컴포넌트 -> 자식컴포넌트로 프롭스를 전달해 데이터를 전달했다면, useContext 를 이용하면 자유자재로 데이터를 받아올 수 있음.
Context API 필수개념
- createContext : context 생성
- Consumer : context 변화 감지
- Provider : context 전달(to 하위 컴포넌트)
FamilyContext.js 생성
import { createContext } from "react";
// 여기서 null이 의미하는 것은 무엇일까요?
export const FamilyContext = createContext(null);
GrandFather.jsx
import React from "react";
import Father from "./Father";
import { FamilyContext } from "../context/FamilyContext";
function GrandFather() {
const houseName = "스파르타";
const pocketMoney = 10000;
return (
<FamilyContext.Provider value={{ houseName, pocketMoney }}> // 중앙저장소로 데이터 전달
<Father />
</FamilyContext.Provider>
);
}
export default GrandFather;
Father.jsx
import React from "react";
import Child from "./Child";
function Father() {
return <Child />;
}
export default Father;
Child.jsx
import React, { useContext } from "react";
import { FamilyContext } from "./FamilyContext";
function Child({ houseName, pocketMoney }) {
const stressedWord = {
color: "red",
fontWeight: "900",
};
const data = useContext(FamilyContext);
console.log("data", data);
return (
<div>
나는 이 집안의 막내에요.
<br />
할아버지가 우리 집 이름은{" "}
<span style={stressedWord}>{data.houseName}</span>
라고 하셨어요.
<br />
게다가 용돈도 <span style={stressedWord}>{data.pocketMoney}</span>
원만큼이나 주셨답니다.
</div>
);
}
export default Child;
props 로 내려준 값을 쓴게 아닌, Context 를 이용하여 값을 받아옴.
주의해야할 사항
렌더링문제 : useContext를 사용할 때, Provider 에서 제공한 데이터가 달라진다면, useContext 를 사용하는 모든 컴포넌트가 리렌더링 된다.
'React' 카테고리의 다른 글
[React] Life Cycle (0) | 2023.06.20 |
---|---|
[React] React Hooks 최적화 (React.memo, useCallback, useMemo) (0) | 2023.06.20 |
[React] React Hooks (useRef) (0) | 2023.06.20 |
[React] Styled Components (0) | 2023.06.19 |
[React] React Hooks (useEffect), clean up (0) | 2023.06.19 |