공부기록/[강의노트] Udemy React 완벽가이드 101~200
# 129 [udemy React 완벽 가이드 노트] 리액트 Context 필요성
Jenner
2022. 9. 18. 17:51
문제점
프롭을 통해 많은 컴포넌트를 거쳐 많은 데이터를 전달할 때
문제 예시
App.js 파일의 App 컴포넌트 안에서의 state
const [isLoggedIn, setIsLoggedIn] = useState(false);
이 state는 모든 컴포넌트에서 쓰이게 된다.
return (
<React.Fragment>
<MainHeader isAuthenticated={isLoggedIn} onLogout={logoutHandler} />
<main>
{!isLoggedIn && <Login onLogin={loginHandler} />}
{isLoggedIn && <Home onLogout={logoutHandler} />}
</main>
</React.Fragment>
);
isLoggedIn state는 여러 컴포넌트에서 쓰이게 된다.
login과 logoutHandler 함수도 마찬가지다.
이 데이터들은 props를 통해 전달된다.
그런데 문제는 너무 많은 컴포넌트를 거쳐 실제적으로
데이터가 필요한 컴포넌트에 도달해야 한다는 것이다.
그렇게 되면 데이터가 필요하지 않는 컴포넌트도 거쳐야 한다.
그 컴포넌트에서는 그냥 데이터를 전달할 뿐인 것이다.
MainHeader.js파일
import React from 'react';
import Navigation from './Navigation';
import classes from './MainHeader.module.css';
const MainHeader = (props) => {
return (
<header className={classes['main-header']}>
<h1>A Typical Page</h1>
<Navigation isLoggedIn={props.isAuthenticated} onLogout={props.onLogout} />
</header>
);
};
export default MainHeader;
데이터가 많아지면 데이터만 전달하는 컴포넌트는
경로가 점점 길어지게 된다.
프롭체인 문제
해결방법 : Context
부모는 데이터가 필요하지 않고 관리할 필요도 없는데도
데이터를 관리하고 보내준다.
그래서 리액트의 내부적인 state저장소 reactContext가 있다.
실제로 데이터가 필요해 부모로부터 받는 컴포넌트는
직접 그 저장소에서 받으면 된다.
프롭 체인을 만들지 않아도 되는 것이다.