TS, JS/react
세상 간단한 redux saga 함수 -YEOL
tenchoi
2020. 9. 10. 18:13
Saga란
react redux 패턴에서 redux가 서버값을 가져오는 부분을 실행하면 서버는 값을 토해낼 때까지 지연이 생깁니다.
그래서 그지 연을 기다렸다가 값을 받으면 전달하게끔 동기 처리를 해야 하는데 그 행위를 saga가 대신해줍니다.
능통한 이해를 위해선 js의 generator 문법을 숙지할 필요가 있습니다.
Saga 함수 목록
put : type에 선언된 action을 dispatch 합니다.
ex ->CHECK 라는 이름을 가진 action을 dispatch 합니다.
yield put({
type:'CHECK',
payload:response.data,
});
delay : 시간을 설정하고 시간이 지나면 resolve를 실행하는 promise 객체를 반환합니다.
ex - 이렇게하면 해당 실행이 1000 밀리세컨(1초) 뒤에 시작됩니다.
yield deley(1000);
fork : 함수 형태로 사용하여 fork함수의 인자를 실행하지만 비동기 처리입니다.
export function* Saga() {
yield all([
fork(func1()),
fork(func2()) ]);
};
call :함수 형태로 사용하여 call함수의 인자를 실행하지만 동기 처리입니다.
export function* Saga() {
yield all([
call(func1()),
call(func2()) ]);
};
takeLatest : 동일한 명령이 막 겹치면 마지막 것만 실행합니다. REGISTER 액션을 여러 번 겹쳐서 수행하면
마지막 것만 실행합니다.
export function* authSaga(){
yield takeLatest(REGISTER , registerSaga);
}
takeEvery : 들어오는 모든 액션 명령을 전부 처리합니다.
export function* authSaga(){
yield takeEvery(REGISTER , registerSaga);
}
all : all함수를 사용하여 배열에 인자로 넣어주면 내부 함수들이 동시에 실행되고 전부 resolve 될 때 완료 처리됩니다.
export function* rootSaga(){
yield all([authSaga() , userSaga() ]);
}
saga에서 사용하는 건 대부분 call과 teakLeast 였습니다. redux사용 중 서버값 가져올 때 비동기 처리해야 하니까요.
지적은 언제든 환영입니다. 감사합니다.