지영이의 개발 블로그
[프리온보딩] 기업과제 #5 (3주차) - Redux toolkit으로 비동기 요청하기 본문
redux로 비동기 통신을 처리해야 하는 과제가 주어졌다 . 하지만 리덕스로 비동기 처리하기 위해선 미들웨어를 설치해야 하는데 나는 리덕스 툴킷에 내장 되어있는 thunk api를 사용해 비동기 통신을 요청해 보고자 하였다.
createAsyncThunk는 비동기 작업을 처리하는 action을 만들어줍니다.
redux가 아닌 리덕스 툴킷을 사용하고자 하는 이유는 다음과 같다 .
<redux 단점 >
- 설정이 어렵다.
-미들웨어 설치가 따로 필요하다
-리덕스 툴킷은 더이상 다양한 패키지들를 설치 하지 않아도 됩니다. 리덕스를 사용하면 redux devtool, immer, thunk 등 여러가지 라이브러리를 추가적으로 설치해야 하지만, redux-toolkit 내부에 이미 설치가 되어 있기에 굳이 설치 할 필요가 없습니다.
-반복되는 코드가 많다 . 예를 들어 action 을 dispatch 할때 쓰는 action create을 항상 코딩해야 하기 떄문 툴킷은 자동으로 설치해준다
-불변성 유지가 어렵다 .
✔CRUD 구현
<createAsyncThunk 사용하기>

✍️비동기 처리를 할 때, 대표적으로 사용되는 3가지 상태
pending 이란 비동기작 업을 시작했을때의 상태
fulfilled 이란 비동기작업이 끝났을때 (data를 가져왔을때)
rejected 란 오류가 발생해서 중다됐을때
createSlice의 extraReducres를 통해 이런 비동기 상태를 쉽게 제어할 수 있다.
✍️오류 처리하기
- createAsyncThunk는 결과에 상관없이 무조건 항상 이행된 프로미스를 반환한다. 따라서, 오류 처리는 별도의 방법을 사용해서 진행해야 한다.
- rejectedValue(value) 함수를 사용해서 createAsyncThunk 내부에서 오류 처리

❤️get 요청
-reducer 만들기

-리스트 받아오기
import { getList, deleteList } from '../store/commentReducer';
import { useDispatch, useSelector } from 'react-redux';
function CommentList() {
const dispatch = useDispatch();
const List = useSelector(state => state.contents.comment);
useEffect(() => {
dispatch(getList());
}, []);
return (
List &&
List.map((comment, key) => (
<Comment key={key}>
<img src={comment.profile_url} alt="" />
{comment.author}
<CreatedAt>{comment.createdAt}</CreatedAt>
<Content>{comment.content}</Content>
<Button>
<a>수정</a>
<a onClick={e => onDelete(e, comment.id)}>삭제</a>
</Button>
<hr />
</Comment>
))
);
}
export default CommentList;
redux/toolkit과 thunk 기본개념 연습
리덕스 툴킷과 청크 그리고 axios를 학습하면서 가장기본적인 POST, PUT, GET, DELETE를 테스트 해보았다. 지금까지는 내가 직접 data배열을 만들어서 프론트에서 직접 사용하였지만 이번에는 json파일에
velog.io
참고 : https://velog.io/@raejoonee/createAsyncThunk
Redux Toolkit의 createAsyncThunk로 비동기 처리하기
Redux Toolkit에는 내부적으로 thunk를 내장하고 있어서, 다른 미들웨어를 사용하지 않고도 비동기 처리를 할 수 있다.
velog.io
'기타' 카테고리의 다른 글
[프리온보딩] 기업과제 #7 (4주차) - [Redux-persist] 새로고침해도 store값이 남아있게 도와주는 redux-persist (with redux-toolkit) (0) | 2022.09.23 |
---|---|
[프리온보딩] 기업과제 #6 (3주차 2) - Intersection Observer API 를 이용한 인피니티 스크롤 구현 (0) | 2022.09.19 |
[프리온보딩] 기업과제 #4 (2주차) (0) | 2022.09.14 |
[프리온보딩] 수업 내용 정리#1 (1주차) (0) | 2022.09.12 |
[프리온보딩] 기업과제 #1 (1주차) (0) | 2022.09.01 |