티스토리 뷰
🙄 왜 사용하나요?
props drilling을 방지하기 위함이다.
Props drilling이란?
부모로 해당 props를 사용할 자식 컴포넌트로 전달하면서, 그 중간에서 props를 사용하지 않음에도 불구하고 props를 전달하는 것을 말한다.
그림으로 그리면 위와 같다. 중간 컴포넌트는 props를 사용하지 않으면서도 props를 전달하기 위해서 props가 거쳐가야 한다는 문제점이 있다.
props가 무엇이냐면 : https://actually-i-am.tistory.com/47
contextAPI를 사용하면, 의미없이 props를 전달하는 대신 해당 state가 필요한 컴포넌트에 바로 state를 전달할 수 있다.
📚 사용 방법
ContextAPI를 어떨 때 쓰는지 알았으니 이제 사용법을 알아보자. 우선 리액트에서 제공하는 createContext
메서드를 통해 context를 생성하고, 생성한 context를 context를 사용하고자하는 컴포넌트에 제공해야한다.
부모 컴포넌트
import React, {createContext} from 'react';
import ChildComponent from './ChildComponent';
export const context = createContext('기본값');
function ParentComponent(){
return (
<context.Provider value="초기값">
<ChildComponent />
</context.Provider>
)
}
export default ParentComponent;
그리고 context로 제공되는 상태를 사용하고 싶은 컴포넌트에서 useContext
메서드를 사용하여 값을 불러오면 된다. 이 context를 통해 상태뿐만 아니라 상태를 변경하는 함수, 객체 등을 불러와서 사용할 수 있다.
자식 컴포넌트
import React, {useContext} from 'react';
import {context} from './ParentComponent';
function ChildComponent(){
const data = useContext(context);
return (
<div>{data}</div>
);
}
export default ChildComponent;
😱 주의사항
하지만 이런 ContextAPI가 항상 좋은것만은 아니다. state가 자주 바뀐다면 ContextAPI를 사용하지 않는 것이 좋다. (ex. 초마다 state가 바뀌는 경우) → 왜냐하면 contextAPI의 state를 변경하면 Provider로 감싼 모든 컴포넌트들이 리랜더링 되기 때문이다.
자주 바뀌는 state값을 관리하기 위해서는 다른 상태관리 도구를 쓰는 것을 추천한다. (ex.리덕스)
📖 요약
- 사용 이유 : props drilling을 방지하기 위해서만 쓰는 것이 좋다.
- 사용 방법
- context만들기 :
createContext
-
const MyContext = createContext('기본값');
-
- provider만들기 → 만들고 사용할 컴포넌트 감싸기
-
function MyProvider({children}){ retyrn ( <MyContext.Provider value="초기값"> {childrent} </MyContext.Provider> ); }
-
- context사용하기 :
useContext
-
const text = useContext(MyContext);
-
- context만들기 :
'코딩 > 리액트' 카테고리의 다른 글
리액트에서 리덕스로 상태관리하기 (0) | 2022.03.31 |
---|---|
또 다른 상태 관리 방법, useReducer (0) | 2022.02.12 |
useEffect가 필요한 이유와 사용법 (0) | 2022.02.09 |
특정 DOM을 선택할 때 사용할 수 있는 useRef (0) | 2022.02.08 |
특별한 props - props.children (0) | 2022.02.07 |
- Total
- Today
- Yesterday
- autoplay
- TIL
- 팁
- 회고록
- 삽질방지
- AWS
- storybook
- 취미
- 키보드
- 개발일지
- 삽질방시
- DevOps
- 웹퍼블리셔
- 프로젝트
- 보안
- 강의후기
- 앨리스배열
- 토이프로젝트
- 리액트
- 네트워크
- 정규표현식
- 키크론 v10
- 타입스크립트
- 리덕스
- 하우징 도색
- 마크다운
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |