[블로깅 챌린지] React Context 정복하기

2023. 4. 26. 15:38· 리액트
목차
  1. Context 사용 예시 
오늘은 블로깅 챌린지 두번째 날이 다가왔다 ! 오늘은 최근에 배웠던 Redux에서 상태 관리 라이브러리로 잠깐 소개만 되었던 리액트 Context에 대해 공부해보았다. 처음 접하는 개념이라 어려웠지만 알아두면 좋을 것 같다 

 

Context 란?
전역적으로 데이터를 공유하기 위한 기능임

일반적으로 React 애플리케이션에서 props를 이용해 데이터를 컴포넌트에 전달하는데
컴포넌트의 깊이가 깊어질수록 매번 props 를 사용해 데이터를 전달하는 것이 번거롭고 복잡해질 수 있음
따라서 이 경우 Context를 사용하면 중간 컴포넌트를 건너 뛰고 데이터를 바로 전달할 수 있음

Context 요소
Provider Consumer
데이터를 제공  데이터를 사용 
Context 사용 
import React from 'react';

const MyContext = React.createContext(defaultValue);
//------------
<MyContext.Provider value={/* 값 */}>
  {/* Provider 하위의 컴포넌트들 */}
</MyContext.Provider>
//------------
<MyContext.Consumer>
  {value => /* 값을 이용한 렌더링 */}
</MyContext.Consumer>
import React from 'react';

// Context 객체 생성
const MyContext = React.createContext('defaultValue');

function App() {
  return (
    // Provider 컴포넌트 사용
    <MyContext.Provider value="Provider Value">
      <div>
        <Child1 />
      </div>
    </MyContext.Provider>
  );
}

function Child1() {
  return (
    <div>
      <Child2 />
    </div>
  );
}

function Child2() {
  return (
    // Consumer 컴포넌트 사용
    <MyContext.Consumer>
      {value => <div>Consumer Value: {value}</div>}
    </MyContext.Consumer>
  );
}

export default App;

Context 사용 예시 

사용자 인증 정보를 전역적으로 공유할 때를 예시로 들자면 로그인한 사용자의 정보를 여러 컴포넌트에서 사용해야 하는 경우 Context 를 사용하여 인증 정보를 공유할 수 있음 

 

1. Context 생성 

createContext() 함수를 사용하여 생성하며 , 인자로 전달한 값은 Context의 기본값임 . 이러한 기본값은 적절한 Povider 를 찾지 못했을 때에만 쓰이는 값임. (Provider 를 통해 undefined를 값으로 보낸다고 해도 컴포넌트들이 기본값을 읽지는 않음 )

 

import React from 'react';

const AuthContext = React.createContext({
  isAuthenticated: false,
  login: () => {},
  logout: () => {}
});

export default AuthContext;

2. Provider 컴포넌트를 사용하여 Context의 값을 제공 

provider 컴포넌트는 최상위 컴포넌트에서 사용됨.  value props에 전달한 값은 Context의 값을 나타냄 

 

import React from 'react';
import AuthContext from './AuthContext';

function App() {
  const [isAuthenticated, setIsAuthenticated] = React.useState(false);

  const loginHandler = () => {
    setIsAuthenticated(true);
  }

  const logoutHandler = () => {
    setIsAuthenticated(false);
  }

  return (
    <AuthContext.Provider
      value={{
        isAuthenticated: isAuthenticated,
        login: loginHandler,
        logout: logoutHandler
      }}>
      <div className="App">
        <Header />
        <Main />
        <Footer />
      </div>
    </AuthContext.Provider>
  );
}

export default App;

 

3. Consumer 컴포넌트를 사용하여 Context값을 사용

Consumer 컴포넌트는 Provider 컴포넌트와 마찬가지로 컴포넌트 내부에서 사용됨 

 

import React from 'react';
import AuthContext from './AuthContext';

function Header() {
  return (
    <AuthContext.Consumer>
      {({ isAuthenticated, login, logout }) => (
        <header>
          {isAuthenticated ? (
            <button onClick={logout}>Logout</button>
          ) : (
            <button onClick={login}>Login</button>
          )}
        </header>
      )}
    </AuthContext.Consumer>
  );
}

export default Header;

 

 

즉 위의 예시는 AuthContext 라는 Context 를 생성하여 인증 정보를 전역적으로 공유하고 , Provider컴포넌트로 값을 제공하며 , Consumer 컴포넌트로 값을 사용함 .

 

참고하면 좋은 문서 

https://ko.legacy.reactjs.org/docs/context.html#when-to-use-context

'리액트' 카테고리의 다른 글

솔로프로젝트 - MaMaMeMo (아이디어 기획 및 디자인)  (0) 2023.09.11
[블로깅 챌린지] 리액트로 간단한 컴포넌트 구현하기  (0) 2023.05.03
상태관리에 관하여  (0) 2023.04.25
Redux 사용하기  (0) 2023.04.24
Custom Component (Styled-Component에 대해)  (0) 2023.04.22
  1. Context 사용 예시 
'리액트' 카테고리의 다른 글
  • 솔로프로젝트 - MaMaMeMo (아이디어 기획 및 디자인)
  • [블로깅 챌린지] 리액트로 간단한 컴포넌트 구현하기
  • 상태관리에 관하여
  • Redux 사용하기
배트리버
배트리버
🐾 사람 좋아, 개발 좋아 🐾 궁금한 건 끝까지 파고들고, 배운 건 즐겁게 나누는 개발자의 놀이터
배트리버
리트리버의 개발 놀이터
배트리버
전체
오늘
어제
  • 분류 전체보기
    • 네트워크
    • 기초 셋팅
    • 오늘의 일기
    • 리액트
    • 코테 준비
      • 프로그래머스
      • 백준
    • 코드스테이츠44기 프론트엔드
    • HTML-CSS-JavaScript
      • HTML
      • CSS
      • JavaScript
    • 자료구조&알고리즘
    • TypeScript
    • Git
    • Tip
    • 프로젝트
    • Next.js
    • 트러블슈팅

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 리액트
  • 타입스크립트문법
  • 코드스테이츠
  • 프로젝트 회고
  • 자바스크립트 비동기
  • 리액트 상태관리
  • 코드스테이츠 44기 프론트엔드
  • 코드스테이츠 프론트엔드
  • 티스토리챌린지
  • 리액트쿼리
  • 코드스테이츠 회고록
  • BFS
  • 네트워크
  • KPT 회고
  • 코드스테이츠 44기
  • 탄스택쿼리
  • 코드스테이츠 블로깅
  • 프로그래머스
  • 오블완

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
배트리버
[블로깅 챌린지] React Context 정복하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.