React Hooks 4 - useContext

2024. 8. 19. 18:46·프론트엔드/React

 

 

 

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를 사용하고 있는 모든 컴포넌트가 리렌더링됨

 

 

'프론트엔드 > React' 카테고리의 다른 글

개인프로젝트 - 포켓몬 도감  (2) 2024.08.26
React Hooks 5 - memoization  (0) 2024.08.19
React Hooks 3 - useRef  (0) 2024.08.19
React Hooks 2 - useEffect  (0) 2024.08.19
React Hooks 1 - useState  (0) 2024.08.19
'프론트엔드/React' 카테고리의 다른 글
  • 개인프로젝트 - 포켓몬 도감
  • React Hooks 5 - memoization
  • React Hooks 3 - useRef
  • React Hooks 2 - useEffect
장쫑이이
장쫑이이
  • 장쫑이이
    JongHoy
    장쫑이이
  • 전체
    오늘
    어제
    • 코딩공부하기 (41)
      • 프론트엔드 (41)
        • Next.js (12)
        • React (16)
        • TypeScript (2)
        • 상태관리 (1)
        • HTML&CSS (1)
        • 기타 (9)
      • 과거 공부 내용 (0)
        • JSCODE 그룹스터디 (0)
        • JS 객체 지향 프로그래밍 (0)
        • 리엑트 (0)
        • 제로초 - 웹 게임을 만들며 배우는 리엑트 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    isNan
    map
    slice
    reduce
    useState
    github
    setAttribute
    LastIndexOf
    destructuring
    필터링
    팀프로젝트
    유클리드 호제법
    git
    이중 for문
    속성 추가
    행렬의 덧셈
    토글
    Filter
    styled-components
    While문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
장쫑이이
React Hooks 4 - useContext
상단으로

티스토리툴바