(React.js 후크) useContext, 컨텍스트 API 관련 이미지

(React.js 후크) useContext, 컨텍스트 API

1- useContext란 무엇입니까?


useContext, 컨텍스트 API 관련 대표 이미지

React에서 데이터는 Props를 통해 위에서 아래로(부모에서 자식으로) 흐릅니다.

Props를 사용하여 데이터를 전달할 때 부모 구성 요소는 각 Props를 자식 구성 요소 태그에 배치하고 수준별로 전달해야 합니다. (오거 드릴링: 최하위 컴포넌트만 데이터가 필요하더라도 전달 과정에서 데이터가 중간 컴포넌트를 거쳐야 합니다. Main 구성 요소는 데이터가 필요하지 않지만 Profile 구성 요소에 데이터를 전달하려면 데이터를 Props로 수신하고 다시 Props로 전달해야 합니다. )

상위 구성요소(앱)

<Header user={user} />

하위 구성요소(헤더)

<SearchBar user={user} />

Props를 사용하여 데이터를 전달하는 것은 종종 전역 데이터를 필요로 하는 애플리케이션에 많은 구성 요소가 있을 때 비효율적입니다. ⇒ 해상도: 컨텍스트 API

글로벌 데이터: 사용자(현재 로그인한 사용자 정보), 테마, 언어

2- 컨텍스트 API란 무엇입니까?

여러 구성 요소(Props X) 간에 애플리케이션에서 전역적으로 사용되는 데이터를 쉽게 공유하는 방법을 제공합니다.

  • 컨텍스트는 꼭 필요한 경우에만 사용해야 합니다. (컨텍스트를 사용하면 구성 요소를 재사용하기 어렵습니다.)
  • 오거 드릴링을 피하는 것이 목표라면 먼저 구성 요소 혼합을 고려하십시오.

3- 샘플 코드

1. 다크 모드용 소품 사용

function App() {
  const (isDark, setIsDark) = useState(false);
  return <Page isDark={isDark} setIsDark={setIsDark} />;
}

부모(App) → 자식(Page)에 데이터 전달 Props(isDark, setIsDark)

페이지 구성 요소(앱의 하위 구성 요소 및 머리글, 콘텐츠, 바닥글의 상위 구성 요소)

const Page = ({ isDark, setIsDark }) => {
  return (
    <div className="page">
      <Header isDark={isDark} />
      <Content isDark={isDark} />
      <Footer isDark={isDark} setIsDark={setIsDark} />
    </div>
  );
};

Page 컴포넌트는 isDark, setIsDark 데이터가 필요하지 않은 중간 컴포넌트이지만 자식 컴포넌트로 데이터를 전달하기 위해 데이터를 받은 후 Props로 자식 컴포넌트에 반환됩니다.

머리글

const Header = ({ isDark }) => {
  return (
    <header
      className="header"
      style={{
        backgroundColor: isDark ? "black" : "white",
        color: isDark ? "white" : "black",
      }}
    >
      <h1>Welcome 민희!</h1>
    </header>
  );
};

콘텐츠

const Content = ({ isDark }) => {
  return (
    <header
      className="content"
      style={{
        backgroundColor: isDark ? "black" : "lightgray",
        color: isDark ? "white" : "black",
      }}
    >
      <h1>민희님, 좋은 하루 되세요</h1>
    </header>
  );
};

보행인

const Footer = ({ isDark, setIsDark }) => {
  const toggleTheme = () => {
    setIsDark(!isDark);
  };

  return (
    <footer
      className="footer"
      style={{
        backgroundColor: isDark ? "black" : "lightgray",
      }}
    >
      <button className="button" onClick={toggleTheme}>
        Dark Mode
      </button>
    </footer>
  );
};


useContext, 컨텍스트 API 관련 이미지

바닥글의 다크모드 버튼을 누르면 아래와 같이 변경됩니다.


useContext, 컨텍스트 API 관련 이미지

2. useContext를 이용한 테마 적용

컨텍스트/ThemeContext.js

import { createContext } from "react";

export const ThemeContext = createContext(null);

application.js

function App() {
  const (isDark, setIsDark) = useState(false);

  return (
    <ThemeContext.Provider value={{ isDark, setIsDark }}>
      <Page />; // props 로 전달하지 않음!
    </ThemeContext.Provider>
  );
}

페이지

const Page = () => {

  return (
    <div className="page">
      <Header />
      <Content />
      <Footer />
    </div>
  );
};

데이터가 필요하지 않으므로 아무 것도 수신되지 않습니다.

머리글, 내용 및 바닥글이 모두 동일합니다.

const { isDark } = useContext(ThemeContext); 

데이터에서 받고자 하는 파라미터만 받기

3. useContext를 사용하여 사용자 정보 적용

컨텍스트/UserContext.js

import { createContext } from "react";

export const UserContext = createContext(null);

application.js

function App() {
  const (isDark, setIsDark) = useState(false);

  return (
    <UserContext.Provider value={"사용자"}>
      <ThemeContext.Provider value={{ isDark, setIsDark }}>
        <Page />
      </ThemeContext.Provider>
    </UserContext.Provider>
  );
}

제목 내용

const user = useContext(UserContext);
<h1>Welcome {user}</h1>


useContext, 컨텍스트 API 관련 이미지

React Hooks에 빠지다 – useContext + Context API | React Hooks 시리즈 참고용으로 작성했습니다.

https://github.com/heehminh/React-JS-Study/tree/main/hooks-use-context

GitHub – hehminh/React-JS-스터디

GitHub에서 계정을 생성하여 heehminh/React-JS-Study 개발에 기여하세요.

github.com

Similar Posts

  • 공인회계사 시험과목 2차 시험을 알아보고 6월 시험에 대비하세요!

    안녕하세요 독사 여러분, 이번에 준비한 포스팅은 공인회계사 시험과목에 대해서 알아보도록 하겠습니다.공인회계사 시험과목의 2차에 대해 알아보는 이유는 곧 6월 24일~25일에 2차 시험이 치러지기 때문입니다.접수도 곧 시작되니 더 정진해서 준비해주시면 좋은 결과 있을거에요.그럼 바로 시작해볼게요. 2023 회계사 수험생을 위한 독회사 고급정보+무료 인터넷 강의집![독점회사 단독회계사 고급정보집] 수험생활 때문에 공부하는 것도 피곤하고 힘들죠? 그런 여러분들이 정보를 찾는데 어려움을 겪지…

  • 서명 은행이란 무엇입니까?

    시그니처뱅크(Signature Bank)는 미국 뉴욕에 본사를 둔 상업은행으로 주요 고객은 암호화폐 거래회사들이다. 2023년 3월 13일 SVB 위기의 공포가 확산되면서 예금자들이 예치금을 대규모로 인출하고 문을 닫는 뱅크런이 발생했다. 자산은 러시아(약 132조4000억원), 예금은 88억5900만달러(약 115조7200억원)다. 자산규모로 보면 2008년 워싱턴뮤추얼, 이번에 SVB에 이어 미국에서 세 번째로 큰 폐쇄은행이다. 2001년 암호화폐 고객을 위한 대안 은행으로 설립된 Signature Bank는 최근 몇…

  • 건강 식품 목록: 건강한 식단을 위한 다양한 옵션

    소개하다 건강은 모두가 추구하는 가치 중 하나입니다. 건강한 식단을 유지하는 것은 신체적, 정신적 건강을 유지하는 데 매우 중요합니다. 이 건강 식품 목록은 건강을 유지하고 개선하는 데 매우 유용한 정보를 제공합니다. 이 기사에서는 좋은 음식 목록과 그 이점에 대해 자세히 살펴봅니다. 건강 식품 목록 1. 블루베리 블루베리에는 인슐린 수치를 낮추고 뇌 기능을 향상시키는 항산화제가 풍부합니다. 특히…

  • 추천하는 유선 헤드폰 – 카토 수월우! Suigetsu와 Kato는 무엇입니까? 카토의 특징!

    오늘은 유선헤드셋으로 시작하려는 분들에게 초보헤드셋을 추천합니다. 이름은 “KATO”라는 헤드폰, “moondrop”이라는 회사의 헤드폰입니다. 그 전에 수월우가 어떤 회사인지, 카토라는 이름과 유래, 카토의 특징에 대해 알아보도록 하겠습니다. 문드롭이라는 회사? 문드롭이라는 외국계 수월우는 IEM(In Ear Monitoring)을 기획, 제작하는 중국 오디오 전문기업이다. 현재 전 세계적으로 인정받고 대중적인 브랜드이며 대표님이 추구하는 유니크한 컬러톤과 균형잡힌 디자인, 좋은 디자인으로 많은 팬들에게 사랑받는…

  • 비트코인의 미래

    “#bitcoinfuture Cryptocurrencies, 특히 Bitcoin은 미래에 대한 많은 추측과 함께 최근 몇 년 동안 뜨거운 주제가되었습니다. 블록체인 기술의 부상과 비트코인을 받아들이는 비즈니스가 점점 더 많아짐에 따라 암호화폐의 존재가 분명해졌습니다. 그러나 Bitcoin의 진정한 미래는 무엇입니까? ## 비트코인의 장점 비트코인 전문가는 많고 많은 사람들이 이 디지털 통화에 투자하는 이유는 분명합니다. 비트코인의 주요 장점은 다음과 같습니다. * 보안: 비트코인…

  • 2023 청춘투모로우 충전공제 요약

    우리나라 대기업과 중소기업의 임금격차는 매우 크다. 실제로 임금격차뿐만 아니라 복리후생 등 근로조건, 사회적 인식, 근로시간 등 대기업이 중소기업보다 훨씬 낫다. 이 때문에 많은 구직자들이 대기업에 취업하기를 원하지만 대기업 취업의 문은 매우 어렵다. 이러한 차이로 인해 많은 청년들이 중소기업을 기피하고 대기업에만 취업하고자 하여 중소기업의 인력난이 매우 심각합니다. 이러한 문제를 해결하기 위해 정부에서 마련한 혜택 중 하나인…