프론트엔드/React

React Hooks 4 - useContext

장쫑이이 2024. 8. 19. 18:46

 

 

 

useContext

자식 컴포넌트로 데이터를 전달할 때 props를 사용.

하지만 저 밑에 있는 자식 컴포넌트에게 데이터를 전달하기 위해선 prop drilling 현상이 일어남.

prop drilling의 문제점
1. 너무 깊어지면 어디서부터 내려왔는지 파악이 어려움
2. 오류 발생 시점을 찾기 어려움

 

그래서 전역에서 데이터를 관리할 수 있는 useContext가 나옴

 

context API 필수 개념

createContext : context 생성

useContext : context를 구독하고 해당 context의 현재 값을 읽음

Provider : context를 하위 컴포넌트에게 전달

 

 

사용 방법

// FamilyContext.js

import { createContext } from "react";
export const FamilyContext = createContext(null);
// null은 초기값
// GrandFather.jsx

import React from "react";
import Father from "./Father";
import { FamilyContext } from "../context/FamilyContext";

function GrandFather() {
  const houseName = "스파르타";
  const pocketMoney = 10000;

  return (
    <FamilyContext.Provider value={{ houseName, pocketMoney }}>
      <Father />
    </FamilyContext.Provider>
  );
}

export default GrandFather;
// Child.jsx

import React, { useContext } from "react";
import { FamilyContext } from "../context/FamilyContext";

function Child({ houseName, pocketMoney }) {
  const stressedWord = {
    color: "red",
    fontWeight: "900",
  };

  const data = useContext(FamilyContext);
  console.log("data", data);

  return (
    <div>
      나는 이 집안의 막내에요.
      <br />
      할아버지가 우리 집 이름은 <span style={stressedWord}>{data.houseName}</span>
      라고 하셨어요.
      <br />
      게다가 용돈도 <span style={stressedWord}>{data.pocketMoney}</span>원만큼이나
      주셨답니다.
    </div>
  );
}

export default Child;

 

 

주의 사항

리렌더링 이슈를 주의!

Provider에서 제공한 value가 달라지면 useContext를 사용하고 있는 모든 컴포넌트가 리렌더링됨