Cộng đồng Hỏi & Đáp của Inflearn
redux-saga 의 흐름.
Viết
·
619
4
질문1. 리덕스사가에 액션이 전달되는 과정
dispatch({
type: LOG_IN_REQUEST,
data: { email, password },
});
위와 같이 로그인 버튼을 눌렀을때 인자로 전달된 액션을 dispatch 하게 되는데.
function* watchLogIn() {
yield takeLatest(LOG_IN_REQUEST, logIn);
}
이후 사가에서 LOG_IN REQUEST 에관한 액션이 왔을떄 login 함수가 실행된다는 흐름은 이해를 했습니다. 하지만 액션객체의 type 속성인 LOG_IN_REQUEST 가 어떻게 위에 takeLatest 의 첫번째 인자로 인식이되어 login 함수가 실행되는지 직관적으로 이해가 가지않습니다. 이미 사가 라이브러이에서 정해진 규칙같은 건가요 ? 액션을 디스패치 할때 {type: `액션타입`} 형태여야만 takeLatest('액션타입') 이 인식이되는지 궁금합니다.
질문2. yield
function* logIn(action) {
try {
console.log('saga logIn');
// const result = yield call(logInAPI);
yield delay(1000); => 멈춤?
yield put({ => 멈춤?
type: LOG_IN_SUCCESS,
data: action.data,
});
} catch (err) {
console.error(err);
yield put({
type: LOG_IN_FAILURE,
error: err.response.data,
});
}
}
yield 는 중단점 역활을 한다고 이해했습니다. 그럼 위에 takeLatest 의 두번째인자로 위 login 함수가 실행될때 첫번째 yield delay(1000) 이 실행되고 멈추는게아니라 계속에서 아래 yelid put 쪽을 실행되는부분이 이해가 잘 가지않습니다.!
영상 몇번 돌려보고 찾아도 봤는데 스스로 해결하지 못해 질문 드립니다 ㅜㅠ..
Quiz
Redux Thunk의 주된 역할은 무엇일까요?
상태 변화 로깅하기
비동기 액션 처리 돕기
액션 타입 상수화 강제하기
리듀서 불변성 자동으로 관리하기
Câu trả lời 3
6
{type: `액션타입`} 형태여야만 takeLatest('액션타입') 이 인식이되는지 궁금합니다.
네 이게 맞습니다. 둘이 같으면 takeLatest가 반응합니다. 이벤트리스너같은 것과 유사하다고 보시면 됩니다.
saga가 알아서 내부적으로 next를 실행합니다. 그래서 원래 제너레이터를 쓸 때는 yield에서 멈추지만 saga가 next를 계속 순서대로 호출하므로 우리의 눈에는 중단되는 것처럼 보이지 않습니다. next를 호출하면서 Promise는 resolve해서 next를 호출하므로 async/await같은 효과를 낼 수 있습니다.
1
0




