Redux는 기본적으로 React뿐만 아니라 다양한곳에서 사용될수있다.
특히 React에서 상태관리를 할때 Redux를 사용하면 좋다.
Ex)
const ADD_TODO = 'ADD_TODO'
{
type: ADD_TODO,
text: 'Build my first Redux app'
}
Ex)
const AddTodo = (text) => {
type: ADD_TODO,
text
}
Reducer들은 각각의 상태변화를 어떻게 시킬지 관리해주는 정보가 담겨져 있다.이들은 전부 Store와 정보를 주고받는 역할을 한다.
Reducer는 그안에서 애플리케이션에 어떤 변화가 생긴다면 전달된 Action을 보고 어떻게 state를 교체시킬지 관리해주는 역할을한다.
Ex)
// reducer의 상태를 초기화 해주는 역할이다.
const todos = (state = [], action) => {
// Action의 타입을 보고 어떻게 state를 교체해줄지 결정해준다.
switch (action.type) {
case ADD_TODO:
/*
아래와 같이 Return해주는 이유는 원래 존재했던 Todo목록을 그대로
불러온 후 추가적으로 ToDo를 추가해준다.
*/
return [...state, {
text: action.text,
completed: false
}];
case COMPLETE_TODO:
return [
...state.slice(0, action.index),
Object.assign({}, state[action.index], {
completed: true
}),
...state.slice(action.index + 1)
];
// 어떤 경우도 통과되지 못하면 원래 존재했던 state를 반환한다.
default:
return state;
}
}
Ex)
import { combineReducers } from 'redux';
const todoApp = combineReducers({
visibilityFilter,
todos
});
createStore는 Store를 만들어주는 역할을 해준다.
import { createStore } from 'redux';
import todoApp from './reducers';
// Reducer들을 store안에 넣어주어서 서로 연결해준다.
let store = createStore(todoApp);
getState는 store안의 상태를 가져와준다.
// Store의 상태를 확인하기 위해 console에 찍어본다.
console.log(store.getState());
스토어에 있는 reducer들에게 action을 전달해준다.
각각의 reducer들은 자신에게 맞는 action이 들어온다면 store의
상태를 교체 할것이다.
store.dispatch(addTodo('Learn about actions'));