리액트의 훅 중 하나로 Context API를 쉽게 사용할 수 있도록 도와준다.
Context는 리액트 애플리케이션에 전역적으로 데이터를 공유할 수 있는 방법을 제공한다.
이를 통해 여러 컴포넌트 간에 props를 일일히 전달하지 않고도 데이터를 손쉽게 전달할 수 있다.
이렇게 되면 props drilling현상이 일어난다.
- 깊이가 너무 깊어지면 해당 prop이 어떤 컴포넌트로부터 왔는지 파악이 어려워진다.
- 어떤 컴포넌트에서 오류가 발생할 경우 추적이 힘들어진다.
useContext hook을 통해 쉽게 전역 데이터를 관리할 수 있다.
const MyContext = createContext();export cost FamilyContext = createContext(null);import {createContext} from "react";import { FamilyContext } from "../context/familyContext";

이렇게 사용하면 부모 -> 자식 -> 자식 -> 자식 이런식으로 props를 드릴링 할 필요가 없고,
사용할 자식에서 useContext를 사용하여 생성한 Context를 import 하여 사용하면 된다!
Provider에서 제공한 value가 달라지게 되면 useContext를 사용하고 있는 모든 컴포넌트가 리렌더링이 일어난다는 문제점이 있다.
그래서 value부분을 항상 신경을 써야한다.
useContext의 존재를 모를때에는
실습 할 때 컴포넌트를 분리하는 과정에서 부모에서 props를 자식으로 복잡하게 많이 내려줬어야 했는데,
너무 복잡해져서 이게 맞나? 뭔가 이상한데?
라는 생각으로 props를 여기저기 내려줬던 기억이 있다.
일단 다른 방도는 없으니 내려주고 내려주고 하는 과정에서
내머리도 복잡, 코드도 복잡해졌었던 기억이 있다.
이게 props drilling이라는 것을 알게되었고
다음 실습부터는 useContext를 사용하여 context API를 사용할 때 주의사항을 고려하며 코드의 복잡성을 줄여 코드를 작성해야겠다는 생각이 들었다!
빨리 깔끔하게 컴포넌트를 분리하고,
깔끔하게 코드 리팩토링하여 코드를 작성하는 실력이 되었으면 좋겠다!
그 날이 오기까지 열심히 실습을 하며 많은 시행착오를 겪어야 겠다!