이전 프로젝트에서 상태 관리 라이브러리의 필요성을 뼈저리게 느끼고 redux toolkit을 이용하여 todo service를 재구현해 봤다.
개념과 주요 함수를 이해하고 난 후에는 비교적 쉽고 재미있게 구현을 했다.
redux toolkit 덕분에 잃어버렸던 태그 컬러도 찾고 마음의 평안도 얻었다. 😇써보면서 느낀 상태관리 라이브러리의 좋은점
- 하나의 store에서 상태를 관리하여 로직을 파악하기 쉬웠다.
(이전) state&props로 상태를 관리할때는 하나의 상태를 두개의 컴포넌트가 변경하여 의도치 않은 필터링이 걸리는 경우가 있었다.
→ (문제상황) selectedTag 상태를 사이드바와 모달에서 사용하였는데, 이로인해 모달에서 태그를 선택하면 의도치 않게 사이드바의 태그 필터링이 활성화되었다. 이를 해결하기 위해 상태를 나눠야했다.
→ (해결) 상태관리 라이브러리에서는 add 버튼을 누를 때 필터링을 해제하도록 하여 문제를 방지했다. 즉 상태가 아니라 액션을 나누어 문제를 해결했다.- 각 기능을 독립적으로 구현가능하다(?)
state&props로 구현할때는 하나의 기능을 구현하면, 이미 구현한 기능 하나 또는 여러개를 내어주어야했다 🥲 (꼬이고 꼬이고 꼬이는 상태들.. ) 그런데 상태관리 라이브러리를 사용하니 이런 문제가 자연스레 해결되었다.
🔫 아주 중요하게 배운점
리팩토링을 한다고 이전의 코드를 순서없이 때려 넣으면 안된다! redux toolkit 라이브러리를 사용하여 프로젝트를 진행하는 것처럼 구현 순서를 따라 생각하면서 코드를 짜야한다.
(생각없이 때려넣다가 뒤엎은자의 깨달음)
createSlice를 실제 코드에서 어떻게 사용하면될지 감을 잡았다. 🔫 그냥 중요하게 배운점
하나의 reducer에 여러 state 변경을 넣지말자. 쉽게 state 변경이 꼬여버리는데, 천재들은 몰라도 나는 풀줄을 몰라.. 그냥 따로 적자.
createSlice로 생성된 slice에서 정의된 state는 해당 slice의 scope 안에서만 유효하다. 즉, todoSlice에서 정의된 state를 filterSlice의 initialState로 쓸 수 없다. // 다른 slice에서 가져온 todos state의 변경으로 현재 slice의 변경을 의도하면 안되다. 불변성에 어긋난다.
// 그리고 initialState는 "오직" slice가 처음 생성될때만 사용되어서 업데이트 자체가 안된다.
const todos = useSelector(state => state.todos);
const filterSlice = createSlice({
name: "filter",
initialState: todos,
reducers: {}})
🔫 자주한 실수
state.todos ! createSlice()함수는 slice의 이름과 초기 상태(initial state), 그리고 reducers 객체를 인자로 받는다.name은 해당 slice(상태)의 이름을 의미한다. 보통 상태의 이름으로 설정한다.initialState는 해당 slice의 초기 상태를 정의하는 것으로 필수적인 요소이다.reducers는 해당 slice의 액션 생성 함수들을 정의한다.createSlice 함수가 반환하는 객체는 store에 등록해주면 된다 → configureStoreconfigureStore 함수는 redux 스토어 생성할때 사용하고,combineReducers 함수는 redux 스토어에 여러 리듀서를 함께 적용하고 싶을때 사용한다는데, combineReducers의 쓰임은 아직 잘 모르겠다. (그래서 안썼다)useSelector함수는 Redux 스토어에서 state를 추출할 때 사용한다.useDispatch함수로 dispatch 메서드에 접근 → 액션 생성 → Redux store에서 state 변경(previousState, action) => newState의 형태를 가진다.action의 역할 → 데이터를 전달해준다.(나에게 ! 👻)



아자아자 화이팅 ! 🔥