delay(1000)
204
26 asked
sagas/user.js
import { delay, all, fork, put, takeLatest } from "redux-saga/effects";
function logInAPI() {
return axios.post('/api/login')
}
function* logIn(action) {
console.log('saga start')
try {
// const result = yield call(logInAPI, action.data)
delay(1000)
yield put({
type: 'LOG_IN_SUCCESS',
data: action.data
});
} catch (err) {
yield put({
type: 'LOG_IN_FAILURE',
data: err.response.data
});
}
}
function logOutAPI() {
return axios.post('/api/logaout')
}
function* logOut() {
try {
// const result = yield call(logOutAPI)
delay(1000)
yield put({
type: 'LOG_OUT_SUCCESS',
});
} catch (err) {
yield put({
type: 'LOG_OUT_FAILURE',
});
}
}
function* watchLogIn() {
yield takeLatest('LOG_IN_REQUEST', logIn)
}
function* watchLogOut() {
yield takeLatest('LOG_OUT_REQUEST', logOut)
}
export default function* userSaga() {
yield all([
fork(watchLogIn),
fork(watchLogOut)
])
}선생님 로딩스피너가 안돌아가고 바로 로그인이 되어버리는데 delay값을 수정해도 스피너가 안보여서 뭐가 잘못 된건가 하고 put으로 반환하는 type값을 없는값을 줬더니 스피너가 돌아가더라구요 delay값을 아무리 수정해도 바로 로그인 되어비리는데 제 코드가 잘못된건가요?
Answer 1
0
선생님 yield 문제였습니다 해결했습니다!!.
선생님 이거 위에 리듀서쪽에서 저 새게 다적어주시는데 기존 initialState 값하고 같으면 굳이 안적어줘도 되지 않나요? 강의에서는 초기화라고 하시는데 굳이 적는 이유좀 설명 부탁드리겠습니다.
0
...state는 initialState가 아닙니다. 이전 state입니다. 이전 state는 initialState랑 스테이트가 다를 수 있습니다. 예를 들어 로그인이 실패한 후 다시 로그인 시도를 하는 상황에서 state가 어떻게 변할지 추적해보세요.
0
어 선생님 ...state가 이전값을 표현한다는게 어떤말인지는 압니다 그런데 어떠한 요청도 없을시 첫 로딩되었을때는 ...state가 initialState와 같은것은 맞을까요?
그리고
case LOG_OUT_SUCCESS:
return {
...state,
logOutLoading: false,
logOutDone: true,
logInDone: false,
me: null,
}그러면 여기 액션 리듀서에서도 loginDone 부븐은 다시 false값으로 돌려줘야하는것도 맞나요? 선생님 코드에서는 loginDone은 그냥 두시길래요 그것도 귀찮으시겠지만 답변 부탁드립니다.
0
첫 로딩때는 initialState와 같습니다.
logInDone은 로그아웃석세스가 아니라 따로 false로 만드는 액션 만들어서 로그인 성공 후 바로 dispatch하여 돌려주시는 게 맞습니다.
0
아네 선생님 이제 어느정도 굴러가는지 흐름이해 했습니다 선생님께서 말씀하신 성공후 바로 dispatch하여 원상태로 돌려주는게 맞다고 하시는 어차피 loginsucces 부분에서 logindone : false로 하는 부분 있는데 그러면 따로 로그인 성공후 바로 dispatch 안해도 되는부분 맞는걸까요? 모든로직 부분에서 어차피 request 부분에서 done, err부분 dispatch 해주는 부분이 있어서 선생님 이 말씀하신 성공후에 바로 dispatch하는 부분이 꼭 필요한지 그걸 알고싶네요?
0
일단 login_success에서는 loginDone을 true로 만들고요. 예를 들어 로그인 성공 시 알림이 가게 하는 코드가 있다면 useEffect 안에서 if (loginDone) alert(...) 이런 식으로 있을 겁니다. 근데 이게 loginDone을 다시 false로 안 되돌리면 useEffect가 실행될 때마다 alert 창이 떠버립니다. 그래서 alert 후에 dispatch로 다시 loginDone이랑 loginErr를 false로 되돌리는 액션을 호출해줘야 하는 겁니다.
넥스트 버젼 질문
0
75
2
로그인시 401 Unauthorized 오류가 뜹니다
0
88
1
무한 스크롤 중 스크롤 튐 현상
0
172
1
특정 페이지 접근을 막고 싶을 때
0
103
2
createGlobalStyle의 위치와 영향범위
0
94
2
인라인 스타일 리렌더링 관련
0
90
2
vsc 에서 npm init 설치시 오류
0
146
2
nextjs 15버전 사용 가능할까요?
0
158
1
화면 새로고침 문의
0
120
1
RTK에서 draft, state 차이가 있나요?
0
152
2
Next 14 사용해도 될까요?
0
452
1
next, node 버전 / 폴더 구조 질문 드립니다.
0
348
1
url 오류 질문있습니다
0
211
1
ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out
0
372
1
sudo certbot --nginx 에러
0
1271
2
Minified React error 콘솔에러 (hydrate)
0
469
1
카카오 공유했을 때 이전에 작성했던 글이 나오는 버그
0
246
1
프론트서버 배포 후 EADDRINUSE에러 발생
0
325
1
npm run build 에러
0
517
1
front 서버 npm run build 중에 발생한 에러들
0
381
1
서버 실행하고 브라우저로 들어갔을때 404에러
0
336
2
css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.
0
284
1
팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.
0
235
2
해시태그 검색에서 throttle에 관해 질문있습니다.
0
200
1

