Store 만들기
src/stores 폴더 내부에 폴더 생성
createSlice
API 를 사용해서 action과 reducer 로직 정의→ slice 란, App 의 단일 기능에 대한 상태와, 액션 로직을 한 곳에 모아둔 것
slice
를 만들고 나면, 해당 폴더의 index.ts
에서 reducer 와 action 을 export
해주고,stores/index.ts
의 combineReducers
내부에 Reducer
를 추가해준다.dispatch
를 통해 reducer
을 실행할 때는 useAppDispatch
를 사용한다Selector 만들기
state 를 가져오기 위해서는
selector
를 정의해주어야 한다.slice
에 정의한 state
들을 가져올 수도 있고, 어떤 값이 바뀌었을 때 재계산되어야 하는 로직이 필요한 경우 createSelector
를 사용해 selector
를 정의할 수도 있다.selector
를 만들고 나면, 해당 폴더의 index.ts
에서 export
해준다.selector
로 값을 가져올 때는 다음과 같이 useAppSelector
를 사용한다listener 만들기
값을 단순 계산하는 로직이 아니라, React 의
useEffect
hook 처럼, action
이 수행될 때 특정한 로직을 수행해야하는 경우라면, listener
를 만들어 사용한다.setAuth action 이 수행되면, token 을 sessionStorage 에 저장하는 effect 를 정의
Unsubscribe
함수를 반환하는 setupAuthListeners
함수를 만들어준다.
subscriptions
배열 안에 해당 action 을 startListening()
하고 난 반환값 저장stores/listeners.ts
의 listeners 배열에 setupAuthListeners 를 추가