06. 전역 상태 관리 라이브러리 소개
🔖 1. 전역 상태 설계 시 두 가지 문제점
(1) 전역 상태를 읽는 방법
(2) 전역 상태에 값을 넣거나 갱신하는 방법
두 문제를 해결하는 예시 코드
// 전역 상태를 관리하는 store 구현
const createStore = (initialState) => {
let state = initialState;
const listeners = new Set();
// 전역 상태를 읽는 함수
const getState = () => state;
// 전역 상태를 갱신하는 함수
const setState = (newState) => { //
state = { ...state, ...newState };
// 상태 변경 시 등록된 리스너(구독자)에게 알림
listeners.forEach((listener) => listener());
};
const subscribe = (listener) => {
listeners.add(listener);
return () => listeners.delete(listener);
};
return { getState, setState, subscribe };
};
// 초기 전역 상태: user는 중첩 객체
const store = createStore({
user: {
name: 'Ella',
age: 20
},
theme: 'dark'
});
// 전역 상태 변경을 위한 전용 함수 제공
function setUserName(newName) {
// 전역 상태의 user 객체를 불변성을 유지하며 갱신
const current = store.getState();
store.setState({
user: {
...current.user,
name: newName
}
});
}
// 사용 예시: user.name을 직접 변경하지 않고 전용 함수로 변경
setUserName('Chloe');
console.log(store.getState().user.name); // "Chloe"🔖 2. 데이터 중심 접근 방식과 컴포넌트 중심 접근 방식 사용하기
데이터 중심 접근 방식
컴포넌트 중심 접근 방식
팩토리 함수
팩토리 함수? 팩토리 패턴?
컴포넌트 중심 접근 예시 코드
🔖 3. 리렌더링 최적화
선택자 함수 사용
상태 사용 추적 (State Usage Traking)
State Usage Traking vs. Subscription
아톰 사용 (using atom)
Last updated