Redux - redux saga

장산·2023년 4월 5일
0

Redux

목록 보기
3/4

redux saga란

  • Redux 미들웨어(Middleware)의 일종으로, 비동기 작업을 처리하기 위한 라이브러리이다. Redux Thunk와 마찬가지로 Redux 액션 객체 내에서 비동기 작업을 처리할 수 있다.
  • 제너레이터(generator)를 이용하여 비동기 작업을 처리하기 때문에, 비동기 작업의 흐름을 더욱 명확하게 제어할 수 있다. Redux Saga는 Redux 액션 객체에 대응하는 제너레이터 함수를 만들어서, 이를 통해 비동기 작업을 처리한다.
  • Redux의 createStore 메서드를 호출할 때 applyMiddleware 메서드를 이용하여 등록할 수 있으며, 이를 통해 Redux 미들웨어 체인(Middleware chain)에 추가된다. Redux Saga에서는 액션 객체에 대응하는 제너레이터 함수 내에서 Redux 디스패치(dispatch) 메서드와 getState 메서드를 호출할 수 있다.
  • Redux Thunk와 달리, 복잡한 비동기 작업을 더욱 쉽게 처리할 수 있으며, 더욱 효율적인 비동기 작업 관리를 가능하게 한다.

예시

import { takeLatest, call, put } from 'redux-saga/effects';
import axios from 'axios';

// API 호출하는 함수
function* fetchUser(action) {
  try {
    // API 호출 시작을 나타내는 액션 객체를 디스패치.
    yield put({ type: "FETCH_USER_REQUEST" });

    // API 호출을 비동기적으로 처리한다.
    const response = yield call(axios.get, `https://api.example.com/users/${action.payload.userId}`);

    // API 호출 성공을 나타내는 액션 객체를 디스패치.
    yield put({ type: "FETCH_USER_SUCCESS", payload: response.data });
  } catch (error) {
    // API 호출 실패를 나타내는 액션 객체를 디스패치.
    yield put({ type: "FETCH_USER_FAILURE", error });
  }
}

// Redux Saga를 등록하는 함수
function* rootSaga() {
  yield takeLatest("FETCH_USER", fetchUser);
}

export default rootSaga;
profile
신입 개발자

0개의 댓글