React
[React] Context 상태 관리
FRDYtheme
2023. 1. 25. 13:13
리액트는 부모에서 자식으로 데이터가 흐르며 props를 이용해 넘겨줘야 하지만
context를 이용하면 컴포넌트 트리 전체에 데이터를 제공할 수 있다.
전역적으로 데이터를 관리하는 기능.
function Counter() {
return (
<>
<h2>카운터 : </h2>
<button onClick={()=> increment()}>증가</button>
<button onClick={()=> decrement()}>감소</button>
</>
);
}
export default Counter;
increment와 decrement 함수를 context로 만들어 전달해보자
import { createContext, useState } from "react";
// 1. 관리자 만들기 (전역 데이터 저장 공간)
export const CounterContext = createContext();
// 2. ui 디자인 가져오기(컴포넌트)
const CounterProvider = (props) => {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
const decrement = () => {
setCount(count - 1);
};
// 3. 관리자에서 자식에게 값 전달. 공급
return <CounterContext.Provider value={{ count, increment, decrement }}>
{props.children}
</CounterContext.Provider>;
};
// context 컴포넌트의 이름이 되며 값을 공급받을 자식 컴포넌트를 감싸줘야 함
export default CounterProvider;
import Counter from "./components/Counter";
import CounterProvider from "./contexts/CounterContext";
function App() {
return (
<>
<CounterProvider>
<Counter />
</CounterProvider>
</>
);
}
export default App;
useMemo(()=>(),[]);
같은 값을 대입 시 나오는 값이 동일한 경우, 즉 계산의 결과가 계속 동일하면
useMemo로 저장한 뒤 동일한 입력에 대응하는 방식
- Context Provider에 전달하는 경우 주로 사용
- const value = useMemo();
const value = useMemo(
() => ({ todos, changeInput, text, addList, onToggle, onDel }),
[todos, changeInput, text, addList, onToggle, onDel]
);