redux-thunk
라는 미들웨어를 사용한다. 이 미들웨어는 리덕스를 개발한 Dan Abramov가 만든 것이며, redux 공식 매뉴얼에서도 이 미들웨어를 사용해 비동기 작업을 다룬다.thunk
const x = 1 + 2;
foo()
가 호출 되어야만 이뤄진다.const foo = () => 1 + 2;
redux-thunk는 뭘 하는 미들웨어일까?
const actionCreator = (payload) => ({
action: 'ACTION', payload
});
redux-thunk
는 이를 가능하게 한다.const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
function increment() {
return {
type: INCREMENT_COUNTER
};
}
function incrementAsync() {
return dispatch => {
// dispatch 를 파라미터로 가지는 함수를 리턴한다.
setTimeout(() => {
// 1 초뒤 dispatch 한다
dispatch(increment());
}, 1000);
};
}
store.dispatch(incrementAsync());
를 하면 INCREMENT_COUNTER
액션이 1초 뒤에 디스패치된다.function incrementIfOdd() {
return (dispatch, getState) => {
const { counter } = getState();
if (counter % 2 === 0) {
return;
}
dispatch(increment());
};
}
redux-thunk
는 일반 액션 생성자에 날개를 달아준다. redux-thunk
를 통해 만든 액션 생성자는 그 내부에서 여러가지 작업을 할 수 있다.이 곳에서 네트워크 요청을 해도 무방하다. 또한, 이 안에서 액션을 여러번 디스패치 할 수도 있다.참조:
2-1. redux-thunk