1. tiny-redux 더 살펴보기


import { createStore } from "./redux";

function reducer(state = { counter: 0 }, action) {
  switch (action.type) {
    case "inc":
      return {
        ...state,
        counter: state.counter + 1
      };
    default:
      return { ...state };
  }
}

const store = createStore(reducer);

store.subscribe(() => {
  console.log(store.getState()); // { counter: 1 }
});

store.dispatch({
  type: "inc"
});

2. Redux 내에서 비동기 호출


Redux는 동기 함수이므로, 비동기 함수로 상태를 업데이트 할 수 없다.

import { createStore } from "./redux";

// setTimeout을 이용한 비동기 함수 api 생성
function api(url, cb) {
  setTimeout(() => {
    cb({ type: "응답이야", counter: 10 });
  }, 2000);
}

function reducer(state = { counter: 0 }, action) {
  switch (action.type) {
    case "inc":
      return {
        ...state,
        counter: state.counter + 1
      };
      break;
    case "fetch-user":
      api("/api/v1/users/1", (users) => {
        return { ...state, ...users };
      });
      break;
    default:
      return { ...state };
  }
}

const store = createStore(reducer);

store.subscribe(() => {
  console.log(store.getState()); // {}
});

// 비동기 작업.. state 업데이트 불가
store.dispatch({
  type: "fetch-user"
});

3. Redux와 Middleware


Redux 내에서 비동기 작업을 처리하기 위해 미들웨어를 이용한다.