이 글은 [[한글자막] React 완벽 가이드 with Redux, Next.js, TypeScript]를 수강하며 정리한 글입니다.
⚛️ 기본 환경: IDE: VS code, Language: React
React.createContext()
: 컴포넌트에게 props를 사용하지 않고 필요한 데이터를 넘겨주며 사용할 수 있게 해 줌으로써 컴포넌트들이 데이터(state)를 더 쉽게 공유할 수 있도록 함
React.createContext() 사용법
1. React createContext() 선언
1
2
3
4
5
6
7
8
9
|
import React from 'react';
const AuthContext = React.createContext({
isLoggedIn: false
});
// AuthContext: Component는 아니지만 Component를 포함하는 객체
export default AuthContext;
|
2. AuthContext가 필요한 Component 감싸기
1
2
3
4
5
6
7
8
9
10
|
return (
<AuthContext.Provider value={{isLoggedIn: isLoggedIn,}}>
<MainHeader isAuthenticated={isLoggedIn} onLogout={logoutHandler} />
<main>
{!isLoggedIn && <Login onLogin={loginHandler} />}
{isLoggedIn && <Home onLogout={logoutHandler} />}
</main>
</AuthContext.Provider>
);
|
⭐ AuthContext 자체는 component가 아니므로 Provider를 같이 사용하여 Component화
→ <AuthContect.Provider> 안의 Component들은 모두 AuthContext의 데이터를 공유
* Provider 역할: 값 설정 및 전달
3. AuthContext 사용 선언
- <AuthContext.Consumer>
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
|
const Navigation = (props) => {
return (
<AuthContext.Consumer>
{(ctx) => {
return (
<nav className={classes.nav}>
<ul>
{ctx.isLoggedIn && (
<li>
<a href="/">Users</a>
</li>
)}
{ctx.isLoggedIn && (
<li>
<a href="/">Admin</a>
</li>
)}
{ctx.isLoggedIn && (
<li>
<button onClick={props.onLogout}>Logout</button>
</li>
)}
</ul>
</nav>
);
}}
</AuthContext.Consumer>
);
};
|
- useContext()
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
|
const Navigation = (props) => {
const ctx = useContext(AuthContext);
return (
<nav className={classes.nav}>
<ul>
{ctx.isLoggedIn && (
<li>
<a href="/">Users</a>
</li>
)}
{ctx.isLoggedIn && (
<li>
<a href="/">Admin</a>
</li>
)}
{ctx.isLoggedIn && (
<li>
<button onClick={props.onLogout}>Logout</button>
</li>
)}
</ul>
</nav>
);
};
|
참고 자료
'JavaScript > React' 카테고리의 다른 글
[ReactJS_Complete] useSelector, useDispatch (0) | 2023.06.04 |
---|---|
[ReactJS_Complete] How Redux Works (0) | 2023.06.04 |
[ReactJS_Complete] React.useReducer() (0) | 2023.06.03 |
[ReactJS_Complete] React.useEffect() (0) | 2023.06.03 |
[ReactJS_Complete] React.useRef() (0) | 2023.06.01 |