728x90
반응형
* props : 부모 > 자식 > 그 자식 > 그 자식의 자식 ....
* props drilling 발생 : 이 props가 어떤 컴포넌트로부터 왔는지 파악하기 어려움 + 유지보수 어려움
* useContext : 전역에서 데이터 관리 가능
(1) Context API 필수 개념 3가지
- createContext : context 생성
- Consumer : context 변화 감지
- Provider : context 전달 (to 하위 컴포넌트)
(2) 주의 사항 : 렌더링 문제
- provider (내 코드에서는 <GrandFather>) 가 제공한 value값이 달라지면
useContext 사용하는 모든 컴포넌트가 리렌더링됨!
=> 이것의 대안 : 메모이제이션
(3) 코드로 구현
- src 폴더 안에 context 폴더 생성 > js 파일 생성
- creatContext import하기
- 변수 생성 후 export하기
- provider로 주입할 수 있는 구간에 전역으로 적용되는 코드
=> export const FamilyContext = createContext(null); - 생성된 코드를 사용하면 끝!
1. <GrandFather>
[props]
const houseName = '스파르타';
const pocketMoney = '10000';
return
<Father houseName={houseName} pocketMoney={pocketMoney}></Father>;
[context]
const houseName = '스파르타';
const pocketMoney = '10000';
return;
<FamilyConext.Provider
value={{ houseName: houseName, pocketMoney: pocketMoney }}>
<Father />
</FamilyConext.Provider>;
▶context에서 전역으로 데이터를 사용할 수 있기에 더욱 간편!
▶context.Provider를 사용하여 하위 컴포넌트로 context 전달
▶context.Provider는 value값에 {객체}가 들어감. key:value값으로 전달하기
2. <Father>
[props]
function Father({houseName, pocketMoney}){
return <Child houseName = {houseName} pocketMoney = {pocketMoney}></Child>
}
[context]
function Father(){
return <Child/>
}
▶Father컴포넌트는 이제 중간에서 전달 안 해도 됨!
3. <Child>
[context]
function Child() {
const data = useContext(FamilyContex); //useContext(Context명칭)
return;
<div>
<span>집 이름은 {data.houseName}</span>
<span>용돈은 {data.pocketMoney}</span>
</div>;
}
▶props로 내려준 값을 사용한 것이 아닌 context를 통해 값을 받아옴!
▶데이터 가져오는 방법 : useContext(Context명칭)
끝.
반응형
'React' 카테고리의 다른 글
React : 리덕스 설정 및 useSeletor (0) | 2023.11.16 |
---|---|
리액트 최적화: React.memo | useCallback | useMemo (0) | 2023.11.16 |
React : 필요 개념 정리 (1) (1) | 2023.11.14 |
[React] 조건부 랜더링 버튼 색상 변경 (0) | 2023.11.13 |
[리액트] 페이지 이동시 데이터 전달 (Router element에 props 사용) (0) | 2023.11.13 |