- Props Drilling 피하기 위해 context를 사용해 데이터를 전달하는 과정이 필요하다
1. Props 전달
2. 컴포넌트를 추출하여 JSX를 Children으로 전달
1. 테마 지정 : 최상위에서 조정
2. 현재 계정 정보
3. 라우팅 정보
4. reducer를 context와 함께 사용
export default function Section({children}) {
return (
<section className = "section">
{children}
</section>
);
}
- Heading 이Context에서 Level 정보를 알 수 있도록 함
export default function Heading({ children }) {
const level = useContext(LevelContext);
// ...
}
- Section의 child컴포넌트에 Context를 제공하기 위해 Context Provider로 감싸줌
import { LevelContext } from './LevelContext.js';
export default function Section({ children }) {
const level = useContext(LevelContext);
return (
<section className = "section">
<LevelContext.Provider value = {level + 1}>
{children}
</LevelContext.Provider>
</section>
);
}
import { createContext } from 'react';
export const LevelContext = createContext(1);
function MyApp() {
const [currentUser, setCurrentUser] = useState(null);
function login(response) {
storeCredentials(response.credentials);
setCurrentUser(response.user);
}
return (
<AuthContext.Provider value = {{currentUser, login}}>
<Page />
</AuthContext.Provider>
);
}
import {useCallback, useMemo} from 'react';
function MyApp() {
const [currentUser, setCurrentUser] = useState(null);
// useCallback 이용
const login = useCallback((response) => {
storeCredentials(response.credentials);
setCurrentUser(response.user);
}, []);
// useMemo 이용
const contextValue = useMemo(() => ({
currentUser,
login
}), [currentUser, login]);
return (
<AuthContext.Provider value = {contextValue}>
<Page/>
</AuthContext.Provider>
);
}
https://ko.react.dev/reference/react/useContext
[웹 질문 정리] HTML, RESTful API, HTTP 메소드, Webpack과 Babel, MVC패턴과 MVVM 패턴 그리고 Flux패턴 (0) | 2024.12.16 |
---|---|
[CSS] 직면하며 배우는 CSS (1) : overflow, position 속성 (0) | 2024.09.02 |
Webpack ? (0) | 2024.07.03 |
[우아한 타입스크립트 with 리액트] 타입의 세계 : 타입스크립트만의 독자적 타입 시스템 (0) | 2024.06.30 |
[MobX] 공식문서 살펴보기 : MobX 요지, Store 역할 (0) | 2024.05.20 |