$ yarn add redux-saga
import { 사용할 함수명 } from 'redux-saga/effects';
들어오는 모든 액션에 대해 특정 작업을 처리
takeEvery(INCREASE_ASYNC, increaseSaga)
// 들어오는 모든 `INCREASE_ASYNC`액션에 대해 increaseSaga 함수 실행
가장 마지막 실행된 작업만 수행 (기존 진행 중이던 작업 有 → 취소 처리)
여러 액션이 중첩되어 디스패치 되었을 때 → 가장 마지막 액션만 처리 (기존 것들 무시)
ex
takeLatest(DECREASE_ASYNC, decreaseSaga)
/* `DECREASE_ASYNC`액션에 대해서 기존에 진행 중이던 작업이 있다면
취소 처리하고 가장 마지막으로 실행된 작업에 대해서만
decreaseSaga함수를 실행 */
설정된 시간 이후에 resolve하는
Promise
객체를 리턴
ex
delay(1000)
→ 1초 기다리기
특정 액션을 디스패치
put({type: 'INCREMENT']})
여러 사가 합치는 역할
첫 번째 파라미터: 함수(호출하고 싶은)
나머지 파라미터: 해당 함수에 넣을 인수
call(함수, 함수의 인자)
// = request(action.payload)
call(request, action.payload);
// 딜레이 함수로 활용 가능
// = delay(1000)
call(delay, 1000)
현재 상태 조회 (사가 내부에서)
select(state => state.counter) // state 의미: 스토어 상태
사가 실행 주기 제한
사가가 n초에 1번만 호출되도록 설정 가능
형태 & 원리
throttle(n초 * 1000, 액션명, 작업명);
/*
원리 :
- n초 동안 작업을 새로 수행x
- 동시에 가장 최신의 액션(액션명에 해당하는)을 `buffer`에 넣음
⇒ n초의 지연 주기 사이에 (발생하는 해당 액션은 모두 놓치고) 최대 하나의 해당 액션 수행*/
throttle(3000, INCREASE_ASYNC, increaseSaga);
참고