묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
리덕스 툴킷 + axios 에러핸들링 질문드립니다
안녕하세요. 지난번에 리덕스 툴킷관련해서 addCass로 여러 상태관리에 대해 많은 공부가 됐습니다. 단순 상태관리까지는 성공했는데 이제 axios를 붙이다보니 에러핸들링에 관련해서 궁금한점이 생겼습니다. export const loginAsync = createAsyncThunk('user/login', async(action) => { const { data } = action; return axios .post('http://localhost:5000/login', data) .then((res) => res.data) .catch((e) => e); }); 이렇게 createAsyncThunk를 만들어서 통신을 하는데 대충 테스트용으로 만들어놓은 api에서 app.post('/login', (req, res, next) => { const { userId, userPassword } = req.body; if (userId !== 'test' || userPassword !=='123' ) { return res.status(403).json({ login : false }); } else { return res.json({ userName : '이름', userAge : 00, userJob : '초보 프론트엔드' }); } }) 이렇게 내보냈습니다.성공했을때는 문제가 없으나 실패했을때가 문제입니다. 로그인 실패시 export const userSlice = createSlice({ name : 'user', initialState, reducers : {}, extraReducers : (builder) => { builder .addCase(loginAsync.pending, (state) => { state.logInLoading = true; state.logInError = null; state.logInDone = false; }) .addCase(loginAsync.fulfilled, (state, action) => { console.log('성공') // state.logInLoading = false; // state.userInfo = action.payload; // state.logInDone = true; }) .addCase(loginAsync.rejected, (state, action) => { console.log('실패') // state.logInLoading = false; // state.userInfo = null; // state.logInError = action.payload.error; }) } }); 실패해도 fulfilled에 걸리게 됩니다. 403에러를 띄웠다면 saga에서는 failure액션에 걸렸던거같은데 툴킷은 다른거같아서 좀 검색해보니rejectedValue? 라는 함수가 있다는데 임포트 해와도 에러만 날뿐입니다. 제가 청크 미들웨어를 한번도 안써봐서 이렇게 헤메는걸까요? 아니면 툴킷은 따로 에러핸들링 하는 방법이 있나요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요 리덕스 툴킷 관련질문입니다.
안녕하세요. 리덕스 툴킷을 활용하려고 공부를 막 시작했습니다. cra템플릿을 인스톨해서 보고있는데 비동기요청하는 부분이 조금 헷갈려 질문드립니다. // typically used to make async requests. export const incrementAsync = createAsyncThunk( 'counter/fetchCount', async (amount) => { const response = await fetchCount(amount); // The value we return becomes the `fulfilled` action payload return response.data; } ); 위 함수를 extraReducers 내에서 extraReducers: (builder) => { builder .addCase(incrementAsync.pending, (state) => { state.status = 'loading'; }) .addCase(incrementAsync.fulfilled, (state, action) => { state.status = 'idle'; state.value += action.payload; }); }, 대기, 성공, 실패를 addCase해줘야한다 로 이해는 했는데요 그 다움 궁금한점은 api요청이 한가지 가 아닐텐데 많은 api요청들을 어떻게 추가해야하나요?
-
미해결Redux vs MobX (둘 다 배우자!)
툴킷으로 비동기작업시 비즈니스로직 위치
안녕하세요! 툴킷으로 리액트-리덕스 프로젝트를 만들고 있습니다. 툴킷으로 비동기작업을 할 때, 예를들어 API를 호출하여 정보를 받아올 때 사후처리나 에러처리를 하려면 slice의 extraReducer에서 해야하는지요?? 컴포넌트에서 createAsynThunk 액션을 호출하기 때문에비즈니스로직이 컴포넌트에는 들어갈 수 없을 것 같고, createAsyncThunk에는 try-catch를 쓸수 없으니, 여기에도 로직이 들어갈 수 없을 것 같고.. extraReducer에서만 사후처리,에러처리 등의 로직이 들어갈 수 밖에 없는지요??
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
리덕스 툴킷과 적용과 사가에 대한 질문입니다
일단 강의 정말 잘 봤습니다. 특히 배포하는 부분에서 많이 배웠고 부족한 점이 많구나 생각이 들었습니다. 다름이 아니고 궁금한 것은 제로초님 유튜브에서 기존에 사용했던 사가를 때어내고 툴킷과 SWR을 적용하는 영상을 봤습니다. 저 또한 툴킷과 SWR을 사용하려고 하고 있던 차에 또 영상에서 하신 말씀이 기억에 남아 질문 남깁니다 1. takeLatest, takeEvery 이정도만 쓰면 Thunk쓰는 거랑 똑같다고 하셨는데 Thunk로 어떻게 구현하셨는지 (툴킷의 createAsyncThunk의 cancelation인지 SWR이나 React-Qeury등의 캔슬 기능으로 구현하셨는지) 2. Saga lodash로 throttle, debounce 어떤 식으로 가능할지 (https://velog.io/@edie_ko/React-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%84%B1%EB%8A%A5-%ED%96%A5%EC%83%81-%EC%8B%9C%ED%82%A4%EA%B8%B0-feat.-Lodash-throttle-debounce) -> 혹시 여기에 설명 되있는 것과 비슷한 개념인지 코드 안 남겨주셔도 되고 전체적인 개념만 설명해주실 수 있으시면 감사하겠습니다. 항상 잘 보고 있습니다!