리덕스(Redux)는 Javascript app을 위한 예측가능한 state container이다. 리액트 뿐만 아니라 Augular, jQuery, vanilla JavaScript 등 다양한 framework와 작동되게 설계되었다.
리덕스는 리액트의 멋진 보완재이다. action에 반응하여 상태를 변경하기 때문에, 리액트 같이 UI를 상태에 대한 함수로 기술하는 프레임워크와 특히 잘 어울리기 때문이다.
애플리케이션의 모든 상태는 하나의 저장소 안에 하나의 객체 트리 구조로 저장됩니다.
가벼운 프로젝트의 장바구니를 예로 들자면, 관리를 위해 최상단에서 state를 만들어 각 component에 props로 전달하여 관리를 할 수 있다. 하지만, 이 프로젝트가 커진다면?? component의 수가 늘어나게되면 props를 전달 하기 위해 필요없는 data의 흐름이 생기게 된다.
하지만 리덕스를 사용하게 되면, 하나의 store를 동해 global state를 포함한, 모든 state를 저장하고 유지할 수 있게 되며, 원하는 component로만 data를 전달할 수 있다.
const ADD_TODO = 'ADD_TODO' // action의 type을 정의
action의 type은 일반적으로 ㅁ누자열 상수로 정의된다. 정의된 type은 creators를 통해 사용된다.
function addTodo(text) {
return {
type: ADD_TODO,
text
}
}
function todoApp(state = initialState, action) {
switch (action.type) {
case SET_VISIBILITY_FILTER:
return Object.assign({}, state, {
visibilityFilter: action.filter
});
default:
return state
}
}
import { createStore } from 'redux';
import todoApp from './reducers';let store = createStore(todoApp);