이번에 만든 유틸 함수는 API 요청을 해 주는 thunk 함수를 한 줄로 생성할 수 있게 해 줍니다. 액션 타입과 API를 요청하는 함수를 파라미터로 넣어 주면 나머지 작업을 대신 처리해 줍니다. 이 함수를 사용하여 기존 thunk 함수의 코드를 대체시켜 볼까요?
modules/sample.js
import { handleActions } from 'redux-actions'; import * as api from '../lib/api'; import createRequestThunk from '../lib/createRequestThunk'; // 액션 타입을 선언합니다. // 한 요청당 세 개를 만들어야 합니다. const GET_POST = 'sample/GET_POST'; const GET_POST_SUCCESS = 'sample/GET_POST_SUCCESS'; const GET_POST_FAILURE = 'sample/GET_POST_FAILURE'; const GET_USERS = 'sample/GET_USERS'; const GET_USERS_SUCCESS = 'sample/GET_USERS_SUCCESS'; const GET_USERS_FAILURE = 'sample/GET_USERS_FAILURE'; // thunk 함수를 생성합니다. // thunk 함수 내부에서는 시작할 때, 성공했을 때, 실패했을 때 다른 액션을 디스패치합니다. export const getPost = createRequestThunk(GET_POST, api.getPost); export const getUsers = createRequestThunk(GET_USERS, api.getUsers); // 초기 상태를 선언합니다. // 요청의 로딩 중 상태는 loading이라는 객체에서 관리합니다. const initialState = { loading: { GET_POST: false, GET_USERS: false }, post: null, users: null }; const sample = handleActions( (...) ); export default sample;
어떤가요? 코드가 많이 줄었지요? 브라우저를 열어서 이전과 똑같이 작동하는지도 확인해 보세요. 똑같은 기능을 훨씬 짧은 코드로 구현했습니다!