티스토리 뷰
단방향 데이터 흐름인 React를 사용 시,
props를 전달만 하는 컴포넌트가 발생하고 props의 작성과 수정도 어려워짐(props drilling)
useContext의 아이디어
<Provider/> 컴포넌트에 모든 데이터를 주고, 하위 컴포넌트에 직접 원하는 데이터들을 주어 props drilling을 없앰
useContext
예시
reateContext 내부에 공유하길 원하는 데이터의 초깃값을 넣어두고 value 변수로 묶어준다.
UserContext.Provider로 감싼뒤 ,value props에 value를 넣어줌
import React, { createContext, useMemo, useState } from 'react';
import Parent from './Parent';
export const UserContext = createContext({
setLoggedIn: () => {},
setLoading: () => {},
});
const GrandParent = () => {
const [loggedIn, setLoggedIn] = useState(false);
const [loading, setLoading] = useState(false);
const value = useMemo(() => ({ setLoggedIn, setLoading }), [setLoggedIn, setLoading]);
return (
<UserContext.Provider value={value}>
<Parent />
<div>{loggedIn ? '로그인' : '로그인안해'}</div>
<div>{loading ? '로딩중' : '로딩안해'}</div>
</UserContext.Provider>
);
};
export default GrandParent;
import React from 'react';
import Children from './Children';
const Parent = () => {
return <Children />;
};
export default Parent;
useContext를 불러와서 안에 UserContext를 넣어주면, Parent에서 props를 전달받지 않았음에도
setLoading과 setLoggedIn을 받아올 수 있다.
import React, { useContext } from 'react';
import { UserContext } from './GrandParent';
const Children = () => {
const { setLoading, setLoggedIn } = useContext(UserContext);
return (
<>
<button onClick={() => setLoading((prev) => !prev)}>로딩토글</button>
<button onClick={() => setLoggedIn((prev) => !prev)}>로딩토글</button>
</>
);
};
export default Children;
출처:https://www.zerocho.com/category/React/post/5fa63fc6301d080004c4e32b
'프로젝트 > 일기장' 카테고리의 다른 글
감정 일기장 - 페이지 추가적인 기능 구현 (0) | 2023.02.24 |
---|---|
감정 일기장 -페이지 생성 및 라우팅 구현 (0) | 2023.02.24 |
useReducer (0) | 2023.02.22 |
useCallback (0) | 2023.02.22 |
React.memo (0) | 2023.02.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Redux
- 프리프로젝트
- 코테
- 기술면접
- BFS
- Python
- 프론트엔드
- 스택오버플로우
- 백준
- til
- 브루드포스
- 그리디 알고리즘
- 다이나믹 프로그래밍
- 프로그래머스
- SEB 43
- dictionary
- useContext
- 코드스테이츠
- 인적성
- SEB 43기
- 프로젝트
- seb
- 회고
- dfs
- SEB43기
- 감정일기장
- React quill
- SEB43
- 감정 일기장
- 개인 프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함