티스토리 뷰
리액트 context와 custom hook의 기능 구분
리액트에서 커스텀 훅과 컨텍스트를 구분해서 사용해야 하는 경우에는 목적과 요구사항을 분석하여 어떤 기능이 더 적합한지 판단해야 합니다.
로직 재사용: 커스텀 훅
- 커스텀 훅은 로직의 재사용에 초점을 맞춥니다.
- 여러 컴포넌트에서 동일한 로직이 필요한 경우, 이를 커스텀 훅으로 분리하여 사용합니다.
- 특정 상태 관리나, 이벤트 핸들러 등을 여러 곳에서 사용해야 할 때 유용합니다.
전역 상태 공유: 컨텍스트
- 컨텍스트는 데이터의 전역 공유에 초점을 맞춥니다.
- 전체 애플리케이션 또는 특정 컴포넌트 트리에서 공통으로 접근해야 하는 데이터가 있는 경우 사용합니다.
- 상위와 하위 컴포넌트 간에 직접적인 props 전달 없이 데이터를 공유해야 할 때 유용합니다.
커스텀 훅과 컨텍스트의 조합
- 전역 상태 로직 캡슐화
예시: 전역으로 사용되면서, 동기화 되어야하는 유저 정보 데이터
// Context
const UserContext = createContext();
// 커스텀 훅
function useUser() {
const context = useContext(UserContext);
if (!context) {
throw new Error("useUser must be used within a UserProvider");
}
return context;
}
// Provider
function UserProvider({ children }) {
const [user, setUser] = useState(null);
return (
<UserContext.Provider value={{ user, setUser }}>
{children}
</UserContext.Provider>
);
}
// 사용자 정보를 표시하는 컴포넌트
function UserProfile() {
const { user } = useUser();
return <div>{user ? user.name : "Guest"}</div>;
}
function App() {
return (
<UserProvider>
<UserProfile />
</UserProvider>
);
}
결정해야 할 주요 질문
- 재사용이 필요한 로직인가? → 커스텀 훅 사용
- 여러 컴포넌트에서 공유되어야 하는 상태인가? → 컨텍스트 사용
- 컴포넌트 트리의 특정 부분에서만 공유되어야 하는 상태인가? → 컨텍스트를 사용하되 적절한 위치에 Provider 배치
- 그냥 특정 컴포넌트 내부에서만 사용되는 상태인가? → 일반 useState 또는 로컬 상태 관리 사용
- 모든 페이지에서 전역으로 사용되고, 공유되어야하는 상태 → 커스텀 훅과 컨텐스트 조합
'개발' 카테고리의 다른 글
fetch로 stream 데이터 처리하기 (0) | 2023.10.20 |
---|---|
SSE(Server-Sent Events) 방식과 WebSocket 통신 방식 (0) | 2023.09.06 |
마이크로 프론트엔드의 기법 (0) | 2023.09.06 |
HTML 기본 태그와 Semantic 태그 (0) | 2021.05.05 |
웹 퍼블리셔와 프론트엔드 개발자 (0) | 2021.05.05 |