store에 직접 접근 할수 없다.
은행(
store
)에 인출을 하러 갔는데 내 돈이긴 하지만 직원(dispatch
,subscribe
,getState
)의 작업(reducer
)을 통해 돈을 받을 수가 있다. (우리가 창구에 직접들어가서 돈을 가져오고 서류를 만지는 행위는 할수 없듯이...)
state
render
subscribe
store.subscribe(render);
action
{
type: 'ADD_TODO',
data: {
id: 1,
text:'acb'
}
}
{
type: 'CHANGE_INPUT',
text: 'hello'
}
dispatch
1.현재의 state값 , 2.action의data
reducer
function reducer(oldState,action){
//...
}
let store = Redux.crateStore(reducer)
$ npm install redux
UNDO, REDO
REDO
- 복구 : 사용자가 했던 작업을 그대로 다시
- 오라클 서버에 무슨 작업을 하든지 모드 기록된다.
UNDO
- 복구: 사용자가 했던 작업을 반대로 진행. 즉, 사용자의 작업을 원상태로 돌린다.
- 작업 롤백, 읽기 일관성
하나의 애플리케이션 안에는 하나의 스토어가 있다. 여러개의 스토어를 사용하는것이 불가는 한건 아니지만 상태관리가 복잡해질수 있어 권장 하지 않는다
리덕스의 상태는 읽기 전용이다.
기존에 리액트에서 setState를 사용하여 state를 업데이트할 때도 객체나 배열을 업데이트 하는 과정에서 불변성을 지켜주기 위해 spread연산자를 사용하거나 immer와 같은 불변성 관리 라이브러리를 사용했다. 리덕스도 마찬가지이다.
상태를 업데이트 할때는 기존의 객체는 건드리지 않고 새로운 객체를 생성해 주어야 한다.
순수한 함수는?