call
function* login() {
try {
yield call(loginAPI);
yield delay(1000);
fork
export default function* userSaga() {
yield all([
fork(watchHello()),
fork(watchLogin()),
put
takeEvery
takeLatest
파일구조
sagas/index.js - user사가, post사가를 모아둔 root사가
sagas/post.js
sagas/user.js
user.js
import { all, fork, call, put, take, takeLatest, takeEvery } from "redux-saga/effects";
import { LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_IN_FAILURE } from "../reducers/user";
const LOG_IN = "LOG_IN";
function loginAPI(){
// 서버에 요청을 보내는 부분
}
// 3
function* login(){
try {
// call : api 동기 호출
yield call(loginAPI);
// 서버 호출 끝나면 로그인 성공
yield put({
type: LOG_IN_SUCCESS
});
} catch (e) {
console.error(e);
// 로그인 실패
yield put({
type: LOG_IN_FAILURE
});
}
}
// 2
function* watchLogin(){
yield takeEvery(LOG_IN, login)
}
export default function* userSaga() {
yield all ([
// 1
fork(watchLogin)
]);
}
pages/index.js
...
const Home = () => {
const { isLoggedIn } = useSelector(state => state.user);
const dispatch = useDispatch();
useEffect(() => {
dispatch({
type: "LOG_IN"
});
}, []);
...
인덱스 페이지에서 dispatch로 실행
call 은 promise 를 반환하는 함수를 호출한다고 알고있어서 저는 비동기의 개념으로 알고있는데
혹시 아닌가요? 서버값 요청할때 제가 call을 쓰는데 비동기 처리가 아닌가해서요.
하지만 다른분들도 call을 동기라고 말씀하세요 fork가 비동기라고 하고...
제가 잘못알고있는부분이 있다면 코멘트 부탁드려도될까요?(저도 공부중입니다!)