inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

회원가입 기능 생성하기

initialState에 있는 error가 안나옵니다.

301

jojonghyeok424

작성한 질문수 3

0

persist에서는 error가 있는데 rehydrate에서는 error 가 없습니다.

그결과 pendding과 rejected에서 error가 안나옵니다.

userslice 코드입니다.

import { createSlice } from "@reduxjs/toolkit";
import { registerUser } from "./thunkFunctions";
import { toast } from "react-toastify";

const initialState = {
    userData: {
        id: "",
        email: "",
        name: "",
        role: 0,
        image: "",
    },
    isAuth: false,
    isLoading: false,
    error: "실패",
};

const userSlice = createSlice({
    name: "user",
    initialState,
    reducers: {},
    extraReducers: (builder) => {
        builder
            .addCase(registerUser.pending, (state) => {
                state.isLoading = true;
            })
            .addCase(registerUser.fulfilled, (state) => {
                state.isLoading = false;
                toast.info("회원가입을 성공했습니다.");
            })
            .addCase(registerUser.rejected, (state, action) => {
                state.isLoading = false;
                state.error = action.payload;
                toast.error(action.payload);
            });
    },
});

export default userSlice.reducer;

react redux node.js 웹앱 mongodb

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. initialState에 있는 error가 안 나타나는 이유는 reducer 함수에서 action.payload를 잘못 사용하고 있어서 그렇습니다.

상황을 보면, registerUser.rejected 액션이 실행되면 state.error 값을 변경하고 toast.error를 호출하려고 하고 있습니다. 그런데 action.payload를 사용하려면 thunk 함수에서 rejected 상태에서 액션의 payload 값을 설정해주어야 합니다. 해당 부분을 잘 확인해보세요.

만약 thunk 함수에서 rejected 상태일 때 action에 payload를 설정해주지 않았다면, action.payload 값은 undefined일 것입니다. 따라서 “error: action.payload”와 “toast.error(action.payload)” 대신에 “error: ‘실패’“와 “toast.error(‘실패’)“를 사용해보세요.

최종적으로, userSlice 코드는 다음과 같이 수정하시면 됩니다.

const initialState = {
    userData: {
        id: "",
        email: "",
        name: "",
        role: 0,
        image: "",
    },
    isAuth: false,
    isLoading: false,
    error: "실패",
};

const userSlice = createSlice({
    name: "user",
    initialState,
    reducers: {},
    extraReducers: (builder) => {
        builder
            .addCase(registerUser.pending, (state) => {
                state.isLoading = true;
            })
            .addCase(registerUser.fulfilled, (state) => {
                state.isLoading = false;
                toast.info("회원가입을 성공했습니다.");
            })
            .addCase(registerUser.rejected, (state, action) => {
                state.isLoading = false;
                state.error = "실패";
                toast.error("실패");
            });
    },
});

export default userSlice.reducer;

위 코드와 같이 action.payload 대신에 “실패”를 사용하면 error 값이 올바르게 설정되고, toast.error(“실패”)가 호출될 것입니다. 이렇게 하면 initialState에 있는 error 값이 올바르게 나타날 것입니다.

추가로, persist와 rehydrate를 사용하고 계신데, persist와 rehydrate에 대한 설정 코드도 확인해보시는 것을 추천드립니다. 문제가 지속되면 관련된 코드를 더 자세히 살펴봐야 할 것 같습니다.

더 도움이 필요하시면 언제든지 말씀해주세요. 수고하세요!

강의 내용은 훌륭하나, 환경 설정 오류 때문에 진도를 나갈 수 없습니다. 20년 버전 강의.

0

61

1

강의자료는 어디서 볼 수있나요??

0

68

1

이 쇼핑몰 만들기 강의는 관리자페이지 만드는건 없나요

0

115

2

웹에서 실시간 코드반영이 안돼요

0

122

1

app.use질문

0

64

1

강사님께 어떻게 직접질문할수있어요??

0

76

1

const함수같은거 기초강의는 어디있나요

0

82

2

리덕스 참조챕터가 어딨어요? 미리듣고오라는데요

0

81

2

강의가완전 오래되서 다 틀리네 app.jsx도 tailwind css 다틀림 무책임함

0

69

1

개발자도구에 redux란이 없어요

0

89

1

npx tailwindcss init -p 에서 계속 에러나요

0

92

1

쇼핑몰기능중 찜하기 기능은 어떻게 구현하나요

0

141

2

강의하다 줌으로 설명가능한지좀 정확히 알려주세요. 이 선생님 정책이 어떻게 되는데요. 직접 연락할 메일이라도 알려주세요

0

43

1

도표 강의 자료 열람 불가능

0

109

1

tailwindcss를 vite에서 이용하는 방식이 바뀐것 같습니다.

0

1137

2

eslint 설정 후 오류가 납니다.

0

223

1

오버로드 오류

0

151

1

VSCode에서 save를 할 때, landingpage의 useEffect가 실행되는 문제에 대하여

0

169

1

dispatch(logoutUser()) 실행시 dispatch(authuser())도 함께 실행되는 문제

0

231

2

logout할 때, server로 요청을 보내서 authUser middleware를 통과하도록 하는 이유?

0

195

1

webkit-text-size-adjust 오류

0

315

1

does not provide an export named 'userReducer'

0

218

2

빌드 배포

0

140

1

삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~

0

222

2