Store(스토어)는 상태가 관리되는 오직 하나의 공간
Action(액션)은 앱에서 스토어에 운반할 데이터를 말한다.
자바스크립트 객체 형식으로 되어있다.
❓ 왜 이런 공식을 따를까?
index.html
<body>
<button id="add">ADD</button>
<span id="num"></span>
<button id="minus">MINUS</button>
</body>
index.js
const add = document.querySelector("#add");
const minus = document.querySelector("#minus");
const num = document.querySelector("#num");
let count = 0;
add.addEventListener("click", () => {
count += 1;
num.textContent = count;
});
minus.addEventListener("click", () => {
count -= 1;
num.textContent = count;
});
index.html
<body>
<button id="add">ADD</button>
<span id="num"></span>
<button id="minus">MINUS</button>
</body>
index.js
const add = document.querySelector("#add");
const minus = document.querySelector("#minus");
const num = document.querySelector("#num");
//리듀서
const countReducer = (state = 0, action) =>{
switch(action.type){
case "ADD":
return state + 1;
case "MINUS":
return state - 1;
default:
return state;
}
};
//store는 데이터를 저장하는 곳
//createStore : store를 생성, 리듀서 함수가 필수임
const countStore = createStore(countReducer);
//subscribe()는 데이터와 저장소가 변경될 때마다 콜백함수를 실행
countStore.subscribe(()=>{
//getState()는 저장소에서 최신상태의 값을 반환할 때 쓰는 메소드
num.textContent = countStore.getState();
});
add.addEventListener("click", () =>{
countStore.dispatch({ type : "ADD"});
});
minus.addEventListener("click", () => {
countStore.dispatch({ type : "MINUS"});
});