App의 모든 상태는 하나의 store에서 관리한다.
store에 저장된 상태 즉, state를 바꾸기 위해서는
action 객체를 dispatch로 전달하는 방법 뿐이다.
실제 코드로는 아래와 같이 구현한다.
import { createStore } from 'redux'
먼저 createStore를 가져와서 store를 만들 준비를 한다 그리고 아래와 같이 reducer를 선언한다
function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
reducer
란 pure function이다
(state, action) => state 의 형태
즉, 기존의 state와 action을 input으로 받아 새로운 state를 return한다
pure function이므로 같은 input이라면 언제나 같은 output을 만든다
state의 형태는 다양하다 array, object 등
state는 직접 수정할 수 없다
수정값을 포함한 새로운 state를 만드는 방식으로 수정한다
위 reducer
는 switch 구문을 사용했지만 fuction maps도 가능하다
let store = createStore(counter)
store를 만들기 위해 createStore에 reducer를 input으로 준다 store는 subscribe, dispatch, getState 3가지 API를 가진다
store.subscribe(() => console.log(store.getState()))
store.dispatch({ type: 'INCREMENT' })
// 1
store.dispatch({ type: 'INCREMENT' })
// 2
store.dispatch({ type: 'DECREMENT' })
// 1
dispatch는 action을 전달하여 결국 state를 수정한다
store.dispatch(action)
action은 dispatch에 전달되어 state를 수정하는 사용자 행동이다
click이나 무엇을 추가하거나 빼거나 등의 행동이 있다
action은 또한 plain object이다
plain object란? 아래 2가지 방법으로 만든 object를 말한다
constructor 로 만든 object와 다르게 property를 공유할 수 없다