[React] Context API로 전역상태관리하기

2024. 2. 8. 02:45·✍️ Today what I Learned _TIL
SMALL

240207 TIL ✏️

 

React의 hook useContext 를 활용해 Context api 로 전역 상태 관리를 해보기 !

 

컴포넌트간에 데이터를 전달할 때 props를 쓰는 방법을 배웠었는데, 이 경우 props-drilling이 발생할 수 있다는 게 문제점이었다. 즉 불필요하게 여러 컴포넌트를 거치며 데이터를 전달하게 될 수도 있다는 것.   

상위 컴포넌트 -> (중간) 컴포넌트 -> 컴포넌트 -> 하위 컴포넌트  .. 이렇게!

 

=>

 

Context api를 통해 이러한 문제를 해결할 수 있음

원하는 컴포넌트에서 바로 데이터를 전달받아 쓸 수가 있다

 

context 폴더 안에  ~ Context.jsx 파일 생성 

그 안에  아래와 같이 {createContext }  import 등 설정을 해주고  이걸 담은 Context 변수를 export해주기

import { createContext } from "react";

export const LetterContext = createContext();

 

바로 LetterContext.Provider 로 쓰는 방법도 있지만, 

이 Context.jsx에서 Provider 함수를 따로 만들어 {children}을 받도록 해  데이터를 전달할 수도 있다

 

아래와 같은 식이다. 

<LetterProvider>  ...  </LetterProvider> 이렇게 감싸줌으로써 태그 사이 들어오는 {children}을 

결국 <LetterContext.Provider> 로 감싸줌으로써  그 안에 value 데이터가 전달되도록 한다

const LetterProvider = ({ children }) => {

...

return (
    <LetterContext.Provider
      value={{
        letterData,
		....
      }}
    >
      {children}
    </LetterContext.Provider>
  );
};

export default LetterProvider;
import LetterProvider from "./context/LetterContext";
import Router from "./shared/Router";
import { GlobalStyle } from "./style/GlobalStyle";

const App = () => {
  return (
    <LetterProvider>
      <GlobalStyle />
      <Router />
    </LetterProvider>
  );
};

export default App;

이렇게 위처럼, App.jsx와 같은 (최)상위 컴포넌트에서 <LetterProvider> 로 감싸주면 그 안에 모두 적용되게 된다.

 

다른 하위 컴포넌트에서는

useContext를 사용해 value - 전달받은 데이터를 사용 가능 !

 

다른 하위 컴포넌트에서

  const { letterData, modifyLetter, deleteLetter } = useContext(LetterContext);

예를 들어 위와 같이 useContext 훅을 사용해 (import하기) 

구조분해할당도 쓰고, letterData 등 변수로 담아 원하는 데이터를 바로 쓸 수 있다.

SMALL

'✍️ Today what I Learned _TIL' 카테고리의 다른 글

[팀 프로젝트(React)] 문제해결: date객체 (ISO)String으로 변환해 Firestore에 넣고, 가져와 시간 뜨게하기 / 시간순 정렬  (2) 2024.02.15
[React] React Vite 프로젝트를 vercel 통해 배포 시 (폴더내부) 이미지 안 뜨는 현상 (=> 웹 url주소 이미지로 대체)  (0) 2024.02.06
[개인 Project] styled components 방식으로 스타일링 하고 컴포넌트 재분리  (1) 2024.02.02
[React] "styled-components" 패키지로 CSS in JS 방식의 스타일 부여하기  (1) 2024.02.01
[개인 Project] My To-Do List -React페이지 보완하기 (추가,삭제,완료버튼+날짜입력 및 오름차/내림차순 정렬 과제하기)  (0) 2024.01.29
'✍️ Today what I Learned _TIL' 카테고리의 다른 글
  • [팀 프로젝트(React)] 문제해결: date객체 (ISO)String으로 변환해 Firestore에 넣고, 가져와 시간 뜨게하기 / 시간순 정렬
  • [React] React Vite 프로젝트를 vercel 통해 배포 시 (폴더내부) 이미지 안 뜨는 현상 (=> 웹 url주소 이미지로 대체)
  • [개인 Project] styled components 방식으로 스타일링 하고 컴포넌트 재분리
  • [React] "styled-components" 패키지로 CSS in JS 방식의 스타일 부여하기
련디
련디
FE - 개발 공부의 기록
  • 련디
    Ryeon's Devstory
    련디
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • 🪴 JavaScript & TypeScript (11)
        • 🧩 Algorithm (6)
      • 🪴 React (12)
      • 🪴 Next.js (8)
      • 🪴 HTML & CSS (2)
      • 🪴 DB & BaaS (5)
      • 🪴 Git &Github (0)
      • ✍️ 프로젝트 과정 & 회고 (18)
      • ✍️ Today what I Learned _T.. (11)
      • 🕊️ IT 아티클 (0)
      • etc. (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • My Github 😺
    • 네이버 블로그 🎵🎧 (일상,음악 등)
  • 공지사항

  • 인기 글

  • 태그

    에러
    티스토리블로그스킨
    State
    BAAS
    route handler
    배열 메서드
    Vite
    axios
    tailwind
    비동기통신
    props
    티스토리챌린지
    react
    NVM
    오블완
    Supabase
    useMutation
    웹개발 기초
    Array.filter
    리액트쿼리
    reacthook
    useEffect
    reactquery
    의존성배열
    Next.js
    json-server
    fetch
    타입스크립트
    렌더링패턴
    컴포넌트분리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
련디
[React] Context API로 전역상태관리하기
상단으로

티스토리툴바