React

[React] useContext Hook

썽연 2021. 10. 17. 13:04
728x90

색상 선택을 하기 위해 이때까지

Context에 있는 값을 사용할 때, Consumer을 이용하였다.

 

리액트에 내장되어 있는 Hooks중에서 useContext라는 Hook을 사용하여,

함수형 컴포넌트에서 Context를 편하게 사용할 수 있다.

 

 

원래 ColorConsumer를 사용한 코드

import React from "react";
import { ColorConsumer } from "../contexts/color";

const ColorBox = () => {
  return (
    <ColorConsumer>
      {({state}) => (
        <>
          <div
            style={{
              width: "64px",
              height: "64px",
              background: state.color,
            }}
          />
          <div
            style={{
              width: "32px",
              height: "32px",
              background: state.subcolor,
            }}
          />
        </>
      )}
    </ColorConsumer>
  );
};
export default ColorBox;

 

 

useContext를 사용한 코드

import React, { useContext } from "react";
import ColorContext from "../contexts/color";

const ColorBox = () => {
  const { state } = useContext(ColorContext);
  return (
    <>
      <div
        style={{
          width: "64px",
          height: "64px",
          background: state.color,
        }}
      />
      <div
        style={{
          width: "32px",
          height: "32px",
          background: state.subcolor,
        }}
      />
    </>
  );
};
export default ColorBox;

 

useContext를 사용해서 코드가 훨씬 간결해지고,

children함수를 전달하는 Render Props패턴이 불편하다면 useContext Hook을 사용하여 훨씬 편하게 Context값을 조회할 수 있다.

 

Hook은 함수형 컴포넌트에서만 사용이 가능하다!

 

클래스형 컴포넌트에서는? 

-Context를 좀 더 쉽게 사용하고 싶다면 static contextType을 정의하는 방법

 

static contextType을 정의하면 클래스 메서드에서도 Context에 넣어 둔 함수를 호출할 수 있다.

하지만! 한 클래스에서 하나의 Context밖에 사용하지 못하기 때문에

새로운 컴포넌트를 작성할 때 함수형 컴포넌트를 사용하여 useContext를 작성하는 것을 권유.

 

728x90