FSA가 적용된 Action 객체
{
type: 'ADD_TODO',
payload: {
text: 'Do something.'
}
}
type
payload
error
meta
액션 생성자 함수를 만들어 준다.
파라미터로 액션 타입을 넣어주면, 해당하는 액션 타입을 가진 액션 생성자 함수를 만들어서 리턴한다.
그리고 이 액션 생성자 함수를 호출하면 액션 객체가 생성된다.
createAction() 예시 코드
export const increase = createAction('INCREASE');
export const decrease = createAction('DECREASE');
increase(); // { type: 'INCREASE' }
decrease(); // { type: 'DECREASE' }
increase(10); // { type: 'INCREASE', payload: 10 }
decrease([10, 20]); // { type: 'DECREASE', payload: [10, 20] }
createActions()
함수는 여러 개의 액션 생성자 함수를 한 번에 만들 수 있게 해준다.
파라미터로 actionMap을 받는다.
actionMap
의 key
는 액션 타입이 되고, value
에는 payload creator 함수가 들어간다.
(payload creator 함수는 액션 객체에 함께 실려보낼 payload 객체를 만들어주는 함수임)
호출된 createActions() 함수는 액션 생성자 함수들이 들어있는 객체를 리턴한다.
createActions() 예시 코드
const { increase, decrease } = createActions({
INCREASE: (amount) => {
return { amount };
},
DECREASE: (amount) => {
return { amount };
},
});
결론적으로 createAction(s) 함수를 사용해서 만들어진 액션 생성자 함수를 호출하면
Flux Standard Action 규칙을 준수하는 액션 객체들이 만들어진다.
액션을 핸들링(처리)하기 위한 함수.
즉, handleAction() 함수의 역할은 리듀서를 생성하는 것이다.
handleAction() 예시 코드
const reducer = handleAction(
'INCREASE',
(state, action) => {
return {
count: state.count + action.payload.amount
}
},
{ count: 0 } // defaultState
);
액션 타입(INCREASE)에 대한 리듀서를 생성해서 리턴한다.
첫 번째 파라미터로 액션 타입이 들어가고,
두 번째 파라미터로 실제 액션을 처리하기 위한 리듀서 함수가 들어간다.
세 번째 파라미터로는 초깃값을 나타내는 defaultState가 들어간다.
handleAction() 함수를 호출하면 해당 액션 타입을 처리하는 리듀서 함수를 리턴한다.
const reducer = handleActions(
{
INCREASE: (state, action) => {
return {
count: state.count + action.payload.amount
};
},
DECREASE: (state, action) => {
return {
count: state.count + ction.payload.amount
};
},
},
{ count: 0 } // defaultState
};
액션 타입 또는 액션 생성자 함수들을 하나로 합쳐주는 함수.
파라미터로 합칠 액션 타입 또는 액션 생성자 함수들을 넣어준다.
createActions()
함수로 만든 액션 생성자 함수들을 combineActions()
함수의 파라미터로 넣을 수 있다.
예시 코드
const reducer = handleActions(
{
[combineActions('INCREASE', 'DECREASE')]: (state, action) => {
return {
count: state.count + action.payload.amount
};
},
},
{ count: 0 } // defaultState
);
// 필요한 함수들을 redux-actions 패키지로부터 import
import { createActions, handleActions, combineActions } from 'redux-actions';
// createAction() 함수로 액션 생성자 만들기
// 두 가지 액션 타입(increase, decrease)에 대한 액션 생성자를 생성함
const { increase, decrease } = createActions({
INCREASE: (amount) => {
return { amount };
},
DECREASE: (amount) => {
return { amount };
},
});
// handleActions() 함수와 combineActions() 함수를 사용해서
// increase, decrease를 처리할 수 있는 리듀서를 생성
const reducer = handleActions(
{
[combineActions(increase, decrease)]: (state, action) => {
return {
count: state.count + action.payload.amount
};
}
},
defaultState
);
// 외부에서 가져다쓸 수 있도록 export 하고, 실제 리덕스 Store에 넣어준다.
export default reducer;