Redux란?
자바스크립트 앱을 위한 예측 가능한 상태 컨테이너
(데이터 바인딩시 상태공유를 하기위해 props로 연속해서 사용하지 않고 한 번만 잘 정의해두면 필요한 파일에서만 간편하게 사용할 수 있다.)
...하지만 나는 아직 간편하지 않다...ㅇㅅㅇ
The Gist!
앱의 상태 전부는 하나의 스토어(store)안에 있는 객체 트리에 저장됩니다. 상태 트리를 변경하는 유일한 방법은 무엇이 일어날지 서술하는 객체인 액션(action)을 보내는 것 뿐입니다. 액션이 상태 트리를 어떻게 변경할지 명시하기 위해 여러분은 리듀서(reducers)를 작성해야 합니다.
import { createStore } from 'redux' /** * 이것이 (state, action) => state 형태의 순수 함수인 리듀서입니다. * 리듀서는 액션이 어떻게 상태를 다음 상태로 변경하는지 서술합니다. * * 상태의 모양은 당신 마음대로입니다: 기본형(primitive)일수도, 배열일수도, 객체일수도, * 심지어 Immutable.js 자료구조일수도 있습니다. 오직 중요한 점은 상태 객체를 변경해서는 안되며, * 상태가 바뀐다면 새로운 객체를 반환해야 한다는 것입니다. * * 이 예시에서 우리는 `switch` 구문과 문자열을 썼지만, * 여러분의 프로젝트에 맞게 * (함수 맵 같은) 다른 컨벤션을 따르셔도 좋습니다. */ function counter(state = 0, action) { switch (action.type) { case 'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 default: return state } } // 앱의 상태를 보관하는 Redux 스토어를 만듭니다. // API로는 { subscribe, dispatch, getState }가 있습니다. let store = createStore(counter) // 업데이트를 직접 구독하거나 뷰 레이어에 바인딩할수 있습니다. // 보통은 subscribe()를 직접 사용하기보다는 뷰 바인딩 라이브러리(예를 들어 React Redux)를 사용합니다. // 하지만 현재 상태를 localStorage에 영속적으로 저장할 때도 편리합니다. store.subscribe(() => console.log(store.getState()) ) // 내부 상태를 변경하는 유일한 방법은 액션을 보내는 것뿐입니다. // 액션은 직렬화될수도, 로깅할수도, 저장할수도 있으며 나중에 재실행할수도 있습니다. store.dispatch({ type: 'INCREMENT' }) // 1 store.dispatch({ type: 'INCREMENT' }) // 2 store.dispatch({ type: 'DECREMENT' }) // 1