-
React를 배우다보니 우리는 많은 전역관리가 있다는 것을 알게 되었다.
그 중에 기본 React의 Hook인 `useContext`에 대해서 공부를 해보았다.
먼저 들어가기 전에!
useContext에 대해 이해하려면 `React`에 있는 `Context`개념부터 알고 넘어가보도록 한다.
Context는 무엇인가?
리액트는 기본적으로 부모 컴포넌트와 자식 컴포넌트로 이루어진 `트리 구조`를 가지고 있다.
부모가 가지고 있는 데이터를 자식에서도 사용하고 싶으면 `props`로 데이터를 넘겨줘야 한다.
하지만 전달해야 하는 데이터가 자식의 자식의 자식에 있으면 코드는 복잡해지고, 계속 `props`로 데이터를 넘겨줘야 한다.
이런 구조를 `props drilling`이라고 하는데, `props drilling`은 이전 포스팅에 정리해둔게 있으니 이 내용에 대해서는 더 깊게 생략!
이러한 `props drilling`을 극복하기 위해 나온 개념이 `Context`이다.
`Context`를 사용하면 `props`전달 없이 하위 컴포넌트에서 자유롭게 값을 가져와서 사용할 수 있다.
useContext
context API 필수 개념
`createContext` : context 생성
`ConSumer` : context 변화 감지
`Provider` : context 전달 ( to 하위 컴포넌트)
특히 `useContext`를 사용하게 되면 Provider(최상위부모)에서 제공한 value값이 달라진다고 가정하면
`useContext`를 사용하고 있는 모든 컴포넌트가 `리렌더링` 된다.
그래서 항상 `value`값을 신경 써 줘야 한다.
실행컨텍스트
어떠한 로직이 실행되는 문맥적인 범위를 말한다.
사용법 예시
import { createContext, useState } from "react"; export const ExpenseContext = createContext(); export default function ExpenseProvider({ children }) { const [expenses, setExpenses] = useState([ { id: "1", month: 2, date: "2024-02-02", item: "식비", amount: 50000, description: "회식", }, { id: "2", month: 1, date: "2024-01-02", item: "도서", amount: 30000, description: "미용실", }, ]); return ( <ExpenseContext.Provider value={{ expenses, setExpenses }}> {children} </ExpenseContext.Provider> ); }
먼저 `Context`에 있는 내용을 만들어준다.
<ExpenseProvider> <BrowserRouter> <Routes> <Route path="/" element={<Home expenses={expenses} setExpenses={setExpenses} />} /> <Route path="/detail/:id" element={<Detail expenses={expenses} setExpenses={setExpenses} />} /> </Routes> </BrowserRouter> </ExpenseProvider>
`Context`가 필요한 곳에 주입해준다.
사용할 컴포넌트
import { useContext } from "react" import { ExpenseContext } from "../../context"
import로 `useContext`를 가져오고,
내보내기 했던 변수명을 가지고온다.
const { expenses, setExpenses } = useContext(ExpenseContext);
그리고 사용할 해당 컴포넌트에 사용해주면 끝이다.
props와 props drilling에 대한 이전 포스팅
✏️ React의 props와 props drilling
컴포넌트끼리의 정보교환 방식부모컨포넌트가 자식컴포넌트에게 물려준 데이터 -> 컴포넌트간의 정보 교류 방법임.props는 반드시 위에서 아래 , 부모->자식 방향으로만 흐른다 (단방향)props
seokachu.tistory.com
'📚 이론정리 > React & Next.js' 카테고리의 다른 글
✏️ Optimistic Update (0) 2024.02.18 ✏️ Lazy-loading (0) 2024.02.18 ✏️ React의 useSearchParams (0) 2024.01.31 ✏️ React의 Router 사용하기, react-router-dom (0) 2024.01.30 ✏️ React의 Link, useNavigate (1) 2024.01.29 댓글