[Tistory] Context Api + Reducer로 전역상태 관리하기 / 아워홈 사전과제

원글 페이지 : 바로가기

1. Why? 아워홈 사전과제에서 상품 리스트의 물건을 장바구니에 담는 부분이 있었다. 이를 위해서는 전역 상태에 장바구니에 담겨있는 상품과 수량 이 필요해 보였다. 이를 사용하는 기능으로는 상품 리스트에서 버튼을 누를경우 장바구니에 담김 이미 담겨 있을 경우 수량 + 1 장바구니에서 수량을 조절할 경우 상품의 수량이 변경 정도가 있을텐데, 겨우 이 정도의 상태 관리를 위해서 전역 상태관리 라이브러리를 사용하는 것은 낭비라는 생각이 들었다. 너무 리덕스? 조타이? 사용 하지 마세요. 그래서 React의 네이티브 기능인 Context Api를 통해서 장바구니 상태를 구현했다. 2. How? Context Api란? 일단 Context Api에 대해서 공식문서로 먼저 알아보자. Context Context lets a parent—even a distant one!—provide some data to the entire tree inside of it. context는 멀리 떨어져 있는 상위 트리라도 그 안에 있는 전체 트리에 일부 데이터를 제공할 수 있게 해줍니다. Context는 단순히 전역 상태만 관리하는게 아니다. 전역으로 멀리 떨어진/다수의 컴포넌트에 데이터를 전달해주는 기능이고, 전역 상태는 그 중 하나일 뿐이다. context 사용 사례 1. Theming 테마 2. Current account 현재 계정 3. Routing 라우팅 4. Managing state state 관리 공식문서에서도 테마, 현재 계정, 라우팅, state관리 4가지를 context의 사용 사례로 제시하고 있다. createContext createContext lets you create a context that components can provide or read. createContext를 사용하면 컴포넌트가 제공하거나 읽을 수 있는 컨텍스트를 만들 수 있습니다. const SomeContext = createContext(defaultValue) defaultValue는 컨텍스트를 읽는 컴포넌트 상위 트리에 일치하는 컨텍스트 provider가 없을 때 컨텍스트가 가지는 값이다. Provider SomeContext.Provider lets you provide the context value to components. SomeContext.Provider를 사용하면 컴포넌트에 컨텍스트 값을 제공할 수 있습니다. function App() {
const [theme, setTheme] = useState(‘light’);
// …
return (



);
}​ provider는 value를 통해서 하위 컴포넌트에게 전달되는 값을 정의한다. 컴포넌트가 컨텍스트를 읽을 때는 가까운 상위 트리의 provider에서부터 값을 찾는다. useContext useContext is a React Hook that lets you read and subscribe to context from your component. useContext는 컴포넌트에서 context를 읽고 구독할 수 있게 해주는 React Hook입니다. SomeContext.Consumer is an alternative and rarely used way to read the context value. SomeContext.Consumer 는 컨텍스트 값을 읽는 또다른 방법이며 거의 사용되지 않습니다. useContext VS Consumer // useContext, ✅ Recommended way
function Button() {
const theme = useContext(ThemeContext);
return

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다