이번에 만든 유틸 함수는 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;

     

    어떤가요? 코드가 많이 줄었지요? 브라우저를 열어서 이전과 똑같이 작동하는지도 확인해 보세요. 똑같은 기능을 훨씬 짧은 코드로 구현했습니다!

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.