-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
result를 console로 찍어보니..
20.06.25 13:40 작성 조회수 132
0
게속 프론트에서 nickname 이 없다고해서
result를 console로 찍어보니
답변을 작성해보세요.
1
1
1
0
이주호
질문자2020.06.25
import { all, fork, takeLatest, call, put, take, takeEvery, delay } from "redux-saga/effects";
import { LOG_IN_SUCCESS, LOG_IN_FAILURE, LOG_IN_REQUEST,
SIGN_UP_SUCCESS, SIGN_UP_REQUEST, SIGN_UP_FAILURE } from '../reducers/user';
import axios from 'axios'
axios.defaults.baseURL = 'http://localhost:8080/api'; //증복된거 줄이기
function* loginAPI(loginData) {
return axios.post('/user/login', loginData); //요청을 보내면 응답을 해주는 애 (SUCCESS인지 FAILURE인지)D
}
function* login(action) {
try { //call은 *동기호출* loginAPI는 서버 요청을 보내는부분 요청을 보내면 받을때까지 기다림, fork로 하면 비동기여서 요청을 보내면 응답을 받지도않고 바로 그 다음줄들 실행
const result = yield call(loginAPI, action.data); //call은 함수를 동기적 호출 server에서 로그인 요청을 보내고 로그인이 성공했다면 그 다움줄 실행
console.log(result);
yield put({ //put은 dispatch 랑 똑같은 역할, loginAPI에 요청을 보내고 응답을 받아야지만 이 줄이 실행
type: LOG_IN_SUCCESS, //yied call(loginAPI)가 요청을 보내 로그인이 성공이면 redux에 LOGIN_IN_SUCCESS 실행
data: result.data //여기에 user정보가들어있음, loginAPI는 로그인이 성공이됬다면 성공이된 user의 데이터를 보내고 그걸 result라는 변수에 담아서 reducer에 보내기
})
} catch (e) { // loginAPI 실패일시 여기에 LOG_IN_FAILURE 에러가 남
console.error(e);
yield put({
type: LOG_IN_FAILURE //로그인이 실패면 LOG_IN_FAILURE 실행
})
}
}
function* watchLogin() { //watch라고 하는이유는 action이 들어와야 실행이되기때문에 기다린다고해서 watch라고 함
yield takeEvery(LOG_IN_REQUEST, login); //LOG_IN Action 받을때까지 기달림 받으면, login 함수실행 login 함수에서는 loginAPI로 서버와의 통신
}
답변 4