initialState초기값을 state에다가 할당을 하므로써 전체 서비스에 data로 연결할수 있게 되었습니다. 👍👍🔥 countModifier함수(reducer) 만 유일하게 data를 수정할 수 있습니다. (밖에 다른 함수를 만들어서 state를 변경하는 함수는 없을 거란 말입니다.) 오직 유일하게 reducer에서만 data를 수정할 수 있습니다.
만약 dispatch에 딕셔너리(dictionary)형태로 값을 넣으면 리덕스 내부적으로 Reducer를 부를 거고(여기서는 modifier함수), 두번째 인자에 있는 action에 딕셔너리의 값들이 들어가게 됩니다. 그리고 getState으로 밑에서 또 호출하게 되면 아래와 같은 data가 보입니다.👇👇
👉subscribe
subscribe은 우리에게 store안에 있는 변화들을 알 수 있게 해준다. 그래서 이번에 우리가 해볼려는 것은 버튼을 클릭하면 store안에 있는 데이터를 화면에 뿌리는것을 해보겠습니다.
const onChange = () => {
app.innerHTML = rootStore.getState().modifier.list //화면에 데이터를 뿌립니다.
}
const rootStore = createStore(rootReducer) //store는 data를 저장하는 곳!
const handleAdd = () => {
rootStore.dispatch(createBucket("data1")) //이벤트가 발생하면 dispatch함수 실행해서 데이터를 추가함
}
rootStore.subscribe(onChange) //subscribe를 사용해서 store에 state가 변했다는것을 감지할수 있습.
btn.addEventListener("click", handleAdd) //이벤트 등록
modifier(Reducer)함수 안에는 현재 상태를 보여주는 state 값이 들어갑니다. 그리고 action도 사용할수 있습니다. action은 modifier(Reducer)와 소통 하는 방법입니다. 어떻게 Reducer에게 action을 보낼수 있냐하면 dispatch를 사용하는것 입니다.(combineReducers[참조링크])
dispatch가 Reducer를 불러서 current state와 그리고 네가 보낸 action을 더해서 store에 저장해놓습니다. 그리고 만약에 state가 변경되었을때 store에서 감지하고 싶다면 subscribe함수를 사용하면됩니다. 그래서 언제든지 store에 state가 바뀌었을때 화면에 데이터를 출력할수 있습니다.
다음에는 React로 redux 이야기를 해보도록 하겠습니다 :) 긴글 읽어주셔서 감사합니다.