일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- DOM
- 조건부스타일
- transition
- 부모요소의 패딩 무시
- ?? #null병합연산자
- react
- createPortal
- CustomHook
- twoarrow
- 서초구보건소 #무료CPR교육
- useQueryClient
- es6
- 부모패딩
- debouncing
- ㅡ
- BlockFormattingContext
- QueryClient
- alias설정
- 함수형프로그래밍
- 리액트
- ignore padding
- 화살표2개
- BFC
- 문제해결
- tailwindCSS
- 제어컴포넌트
- parent padding
- Carousel
- vite
- accordian
Archives
- Today
- Total
프론트엔드 첫걸음
ContextAPI 본문
리액트를 다루는 기술 15장
https://ko.reactjs.org/docs/context.html#caveats
context를 이용하면 단계마다 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 제공할 수 있다.
context 사용 시점
- 전역적인 데이터 공유
- 로그인한 유저, 테마, 선호하는 언어 등
- context를 사용하면 컴포넌트를 재사용하기가 어려워지므로 꼭 필요할 때만 써야한다.
React.createContext
const MyContext = React.createContext(/*defaultValue*/{color: 'black'});
- 새 컨텍스트를 만들 때는 creactContext함수를 사용하고, 함수의 파라미터로 해당 Context의 기본상태를 지정한다.
- Context 객체를 구독하고 있는 컴포넌트를 렌더링할 때 React는 트리 상위에서 가장 가까이 있는 짝이 맞는 Provider로부터 현재값을 읽는다.
- defaultValue 매개변수는 트리 안에서 적절한 Provider를 찾지 못했을 때만 쓰이는 값이다.
Context.Consumer
<MyContext.Consumer>
{value => /* context 값을 이용한 렌더링 */
<div>{value.color}</div>
}
</MyContext.Consumer>
- context 변화를 구독하는 React 컴포넌트로, 이 컴포넌트를 사용하면 함수 컴포넌트 안에서 context를 구독할 수 있다.
- Consumer안의 함수는 context의 현재값을 받아 React노트를 반환한다.
- Provider가 없다면 createContext 생성시 매개변수 defaultValue를 매개변수로 받는다.
Context.Provider
<MyContext.Provider value={/*어떤 값*/{color:'red'}}>
- context를 구독하는 컴포넌트들에게 context의 변화를 알리는 역할을 한다.
- Provider 하위에서 context를 구독하는 모든 컴포넌트는 Provider의 value prop가 바뀔 때마다 다시 렌더링된다.
createContext - color.js
import { createContext } from 'react';
const ColorContext = createContext({ color: 'black' });
export default ColorContext;
Consumer - colorBox.js (Render Props)
import React from 'react';
import ColorContext from '../contexts/color';
const ColorBox = () => {
return (
<ColorContext.Consumer>
{//Render Props - 컴포넌트의 children이 있어야 할 자리에 함수 전달
(value) => (
<div>
style=
{{
width: '64px',
height: '64px',
background: value.color,
}}
</div>
)}
</ColorContext.Consumer>
);
};
export default ColorBox;
- ColorContext안의 Consumer는 context 현재값 받아 함수 전달- Render Props
- Render Props 패턴 대신에 useContext Hook 사용할 수 있다.
Consumer - colorBox.js(useContext))
import React, {useContext} from 'react';
import ColorContext from '../contexts/color';
const ColorBox = () => {
const value = useContext(ColorContext);
return (
<div>
style=
{{
width: '64px',
height: '64px',
background: value.color,
}}
</div>
);
};
export default ColorBox;
단 useContext는 클래스형 컴포넌트에는 사용할 수 없다. 함수형 컴포넌트에만 사용가능하다.
Provider - App.js
import React from 'react';
import ColorBox from './components/ColorBox';
import ColorContext from './contexts/color';
const App = (props) => {
return (
<ColorContext.Provider value={{ color: 'red' }}>
<div>
<ColorBox />
</div>
</ColorContext.Provider>
);
};
export default App;
'개발 공부 > React' 카테고리의 다른 글
Redux Toolkit 이해하기 - vanila javascript에서 써보기 (0) | 2022.08.31 |
---|---|
[문제해결] 중괄호와 괄호 헷갈리지 않게 잘 쓰기 (0) | 2022.08.30 |
immer 사용법 (0) | 2022.08.29 |
불변성을 지키면서 setState (0) | 2022.08.28 |
Todo App 성능개선 (React.memo + 함수형 setState) (0) | 2022.08.28 |