Kimsora✨
article thumbnail
320x100
반응형

상태 관리를 리덕스,리덕스툴킷 라이브러리만 사용해서 관리했는데 리액트에도 상태를 전역으로 관리하는 훅이 있어서 가끔  굳이 라이브러리를 설치하면서 전역으로 관리를 해야할까 생각 했던곳에 적용해야겠다 싶어 공부하고자 한다

 

React Hook인 useContext()는 Context를 좀 더 편하게 사용할 수 있게한다 

=>Context는 전역 상태 관리를 할 수 있는 수단일 뿐이고, 상태 관리 라이브러리는 상태 관리를 더욱 편하고, 효율적으로 할 수 있게 해주는 기능들을 제공해주는 도구이다(상태 관리 라이브러리와 Context 완전히 별개의  개념이다),Context를 쓴다면, 각기 다른 상태마다 새롭게 Context를 만들어주어야 한다

 

 

Context API란?

리액트 컴포넌트간에 어떠한 값을 공유할수 있게 해주는 기능이다

 

createContext()

createContext(initialValue);
  • context 객체 생성
  • createContext() 함수 호출 시 Provider와 Consumer Component 반환
  • initialValue : Provider를 사용하지 않았을 때 적용될 초기값

 

Context.Provider

<Context.Provider>
...
</Context.Provider>
  • 생성한 context를 하위 Component에 전달

 useContext()

const userCtx = useContext(context);
  • context의 변화를 감시
  • 설정한 상태를 불러올 때 사용

App.js

import React, { createContext } from "react";
import Children from "./Children";

// AppContext 객체를 생성한다.
export const AppContext = createContext();

const App = () => {
  const user = {
    name: "김모양",
    job: "백수"
  };

  return (
    <>
      <AppContext.Provider value={user}>
        <div>
          <Children />
        </div>
      </AppContext.Provider>
    </>
  );
};

export default App;

Children.js

useContext 를 미적용

import React from "react";
import { AppContext } from "./App";

const Children = () => {
  return (
      <AppContext.Consumer>
        {(user) => (
          <div>
            <h3>이사람의 이름은 {user.name}입니다.</h3>
            <h3>이사람의 직업은 {user.job}입니다.</h3>
          </div>
        )}
      </AppContext.Consumer>
  );
};

export default Children;

useContext 를 적용

import React, { useContext } from "react";
import { AppContext } from "./App";

const Children = () => {
  // useContext를 이용해서 따로 불러온다.
  const user = useContext(AppContext);
  return (
     <div>
            <h3>이사람의 이름은 {user.name}입니다.</h3>
            <h3>이사람의 직업은 {user.job}입니다.</h3>
          </div>
  );
};

export default Children;

=> <AppContext.Consumer> 같은 코드를 사용해서 복잡하게 작성하지 않고 
const user = useContext(AppContext)를 통해 Context를 불러 온 후 바로 사용이 가능하다

 

 

 

Context 사용전에 고려할 것

context를 사용하면 컴포넌트 재사용이 어려워지므로, 꼭 필요한 경우에만 사용하는 것이 좋다.

많은 컴포넌트들로 구성되있어도, 정보가 한 곳에서만 사용된다면 컴포넌트 병합을, 여러 곳에서 사용된다면 Context가 유리하다

728x90
반응형

'React' 카테고리의 다른 글

react query  (5) 2023.02.23
라이프사이클과 useEffect  (6) 2023.02.16
Axios 인터셉터 사용법  (6) 2023.02.13
중복 submit방지 ( Lodash throttle & debounce)  (0) 2023.02.05
데이터 요청(axios)로구현한 페이지 네이션  (0) 2023.01.23
profile

Kimsora✨

@sorarar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그

WH