리덕스를 배웠고, 사용하며 경험했지만
이번 개발 때 사용하면서 많이 부족하다고 느꼈다..! 뭔가 엉성한 느낌..?
그래서 리덕스를 다시 알아보려고 한다!
여러 컴포넌트가 공유하는 상태를 관리하기 위한 라이브러리
리액트 컨텍스트에 기반을 둔 라이브러리로, provider 컴포넌트가 항상 최상위로 동작해야한다

const store = configureStore({ reducer: myReducer });
return (
<Provider store={store}>
<main>
{/* 컴포넌트 추가*/}
</main>
</Provider>
useSelector: 데이터 읽기. store에 저장된 내용을 read하기 위해서 사용한다.
dispatch: 데이터 수정. state값을 변경하기 위해 사용한다.
스토어: 컴포넌트와는 별개로 스토어라는 공간 안에 필요한 상태를 담는다.
컴포넌트에서 상태 정보가 필요할 때 스토어에 접근한다.
액션: 앱에서 스토어에 운반할 데이터를 말한다. (like 주문서)
리듀서: 액션을 스토어에 바로 전달하는 것이 아닌, 리듀서에 전달한다. 리듀서가 주문서를 보고 스토어의 상태를 업데이트 한다. 액션을 리듀서에 전달하기 위해 사용하는 것이 dispatch() 메소드!
action이 dispatch() 메소드에 전달된다 -> dispatch(액션)을 통해 reducer를 호출한다 -> reducer는 새로운 store를 생성한다.
리듀서
const reducer = (state = initState, action) => {
switch(action.type) {
case ONCLICK:
return {
/* counter값 그대로, ONCLICK시 토글만 변경 */
...state,
toggle: !state.toggle
};
case INCREASE:
return {
/* toggle값 그대로, INCREASE시 diff값 추가 */
...state,
counter: state.counter + action.diff
};
case DECREASE:
return {
/* toggle값 그대로, DECREASE시 counter - 1 */
...state,
counter: state.counter - 1
};
default:
/* 해당하지 않으면 아무 동작도 수행하지 않음 */
return state;
}
}
사실 리덕스가 정리된 블로그나 깃헙이 많기도 하고, 쉽고 재밌게 그림으로 이해를 돕는 자료들도 많다. 근데 머리로는 이해가 가면서 막상 사용하게 되면 또 헷갈리는 그런 리덕스 ..! 이번 기회에 다시 한 번 더 알아보니 좋다!
https://velog.io/@s_soo100/Redux-%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%A6%AC%EB%8D%95%EC%8A%A4-%EC%8A%A4%ED%84%B0%EB%94%941
https://velog.io/@ubin_ing/Redux-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0#%EA%B3%B5%EB%B6%80%ED%95%98%EA%B2%8C-%EB%90%9C-%EA%B3%84%EA%B8%B0
https://medium.com/@heoh06/%EB%A6%AC%EC%95%A1%ED%8A%B8-redux%EC%99%80-%EC%82%AC%EC%9A%A9%EB%B2%95-731853fc3cd4