더 짧게 작성 → 가독성 ⬆, 객체 직접 작성x
createAction
사용 import { createAction } from "redux-actions";
export const increase = createAction(INCREASE)
export const decrease = createAction(INCREASE)
creatAction
2번째 함수에 따로 선언 const MY_ACTION = 'sample/MY_ACTION';
const myAction = creatAction(MY_ACTION, text=> `${text}!`);
const action = myAction('hello world');
/*
결과:
{ type: MY_ACTION, payload: 'hello world!' }
*/
id ⇒ id
) export const toggle = createAction(TOGGLE, (id) => id);
handleActions
사용
import { handleActions } from "redux-actions";
const counter = handleActions(
{
[INCREASE]: (state, action) => ({number: state.number +1}),
[DECREASE]: (state, action) => ({number: state.number -1})
},
initialState
)
action.payload
값을 조회action.payload
가 어떤 값 의미하는지 더 쉽게 파악 가능action.payload
조회 & 객체 비구조화 할당 const todos = handleActions(
{
[CHANGE_INPUT]: (state, action) => ({ ...state, input: action.payload }),
// 비구조화 할당
[CHANGE_INPUT]: (state, {payload: input}) => ({ ...state, input }),
},
initialState,
);
모듈 상태가 복잡 ⬆ → 불변성 지키기 어려움
→ 모듈의 상태 설계 시, 객체 깊이 너무 깊어지지 않게 주의
사용 이유
객체 구조 복잡 & 객체로 이루어진 배열 다룰 때 → 편리한 상태 관리 가능
사용 예시
const todos = handleActions(
{
[TOGGLE]: (state, { payload: id }) =>
produce(state, (draft) => {
const todo = draft.todos.find((todo) => todo.id === id);
todo.done = !todo.done;
}),
},
initialState,
);