내게 필요한 props를 글로벌하게 사용할 수 있도록 도와주는 Hook.
Props Drilling을 막기 위한 Hook이라고도 할 수 있다.
import { createContext, useState } from 'react'; // useContext import
export const TestContext = createContext({
name: '',
setNameHandler: (name: string) => {},
});
const TestContextProvider: React.FC<React.ReactNode> = ({ children }) => {
const [name, setName] = useState('');
const setnameHandler = (name: string) => setName(name);
return(
<TestContext.Provider value={{ name, setNameHandler}}>
{children}
</TestContext.Provider>
);
};
export default TestContextProvider;
import TestContextProvider from './utils/context/TestContext';
const App = () => {
return(
<div className='App'></div>
<TestContextProvider>
<ChildrenComponents />
</TestContextProvider>
);
};
export default App;
🖐️ index.jsx(tsx)에서 App 컴포넌트 전체를 감싸는 것도 되지만, 정확히 필요로 하는 컴포넌트에 Provider를 감싸는 것이 앱이 작동하는데에 있어 효율적으로 작동된다.
import { useContext } from 'react';
import { TextContext } from './utils/context/TextContext
const ChildrenComponents = () => {
const { name, setnameHandler } = useContext(TestContext);
return <div>{name}</div>
};
export default ChildrenComponents;
사용법과 구조에 조금 차이가 있을 뿐, 서로 글로벌 props를 만들어내는 것에 있어서 별다른 차이점은 없다. Redux는 Context API를 기반으로 만들어 졌기 때문이기도 하다.
굳이 차이점이 있다면 단순 전역 상태 관리만 필요하다면 useContext를 사용하고, 디버깅이나 로깅 등의 상태 관리 외의 기능이나 미들웨어가 필요하다면 Redux를 사용하는 것이 좋다.