위의 이미지는 우리가 리액트로 웹을 만들 때 컴포넌트들의 트리구조를 나타내고 있는 이미지다.
이러한 트리구조를 가진 리액트에서 전역(지역) 데이터를 상위 컴포넌트에서 하위 컴포넌트로 전달해 주려면 prop를 통해서 위에서 아래로 계속해서 내려줘야 하는데 컴포넌트의 구조가 단순하고 적다면 크게 문제가 되지 않지만 이 구조가 복잡해지고 많아진다면 문제가 발생한다.
그렇기 때문에 이를 해결하기 위한것이 context로 app 컴포넌트에서 데이터를 가지고 있다면 필요한 곳에서만 해당 데이터를 가져다 사용할 수 있게 해주어서 위의 문제점들을 해결한다.
두 가지의 도구는 얼뜻 보면 동일한 기능을 하는 것 같지만 사용의 목적이 다르다.
다양한 컴포넌트에 전역적인 데이터를 전달하기 위해 사용하는 도구이며 "상태관리를 위한 도구는 아니다."
상태관리란 시간이 지남에 따라 상태가 변경되는 방식을 말하며 리액트에서 상태를 관리하는 도구는 useState와 useReducer를 통해서 이루어진다.
리액트의 내장 기능이다.
props drilling을 피할 때 즉 context.provider 내부에서 상태 변경이 거이 없을 때 하위 컴포넌트에 전달하는 용도로 쓰는데 사용하기 좋다.
props drilling은 props를 하위 컴포넌트로 전달하는 용도로"만" 쓰이는 컴포넌트들을 거치면서 react component트리의 한 컴포넌트에서 다른 곳으로 데이터를 전달하는 과정을 말한다.
애플리케이션 전체의 상태 중앙 저장소 역할을 하며 애플리케이션의 상태를 예측 가능한 방식으로 업데이트 하기 위해서 사용하는 라이브러리다.
여러 위치에 많은 양의 상태 값이 존재 할 때