728x90
반응형
redux-thunk
redux-thunk는 리덕스에서 비동기 작업을 처리 할 때 가장 많이 사용하는 미들웨어
이 미들웨어를 사용하면 액션 객체가 아닌 함수를 디스패치 할 수 있음
redux-thunk는 리덕스의 창시자인 Dan Abramov가 만들었으며, 리덕스 공식 매뉴얼에서도 비동기 작업을 처리하기 위하여 미들웨어를 사용하는 예시를 보여줌
함수를 디스패치 할 때에는, 해당 함수에서 dispatch 와 getState 를 파라미터로 받아와주어야 함
이 함수를 만들어주는 함수를 우리는 thunk 라고 부름
thunk 사용 예시 👇
const getComments = () => (dispatch, getState) => {
// 이 안에서는 액션을 dispatch 할 수도 있고
// getState를 사용하여 현재 상태도 조회 할 수 있습니다.
const id = getState().post.activeId;
// 요청이 시작했음을 알리는 액션
dispatch({ type: 'GET_COMMENTS' });
// 댓글을 조회하는 프로미스를 반환하는 getComments 가 있다고 가정해봅시다.
api
.getComments(id) // 요청을 하고
.then(comments => dispatch({ type: 'GET_COMMENTS_SUCCESS', id, comments })) // 성공시
.catch(e => dispatch({ type: 'GET_COMMENTS_ERROR', error: e })); // 실패시
};
thunk 함수에서 async/await를 사용해도 상관 없음
const getComments = () => async (dispatch, getState) => {
const id = getState().post.activeId;
dispatch({ type: 'GET_COMMENTS' });
try {
const comments = await api.getComments(id);
dispatch({ type: 'GET_COMMENTS_SUCCESS', id, comments });
} catch (e) {
dispatch({ type: 'GET_COMMENTS_ERROR', error: e });
}
}
redux-thunk 설치
yarn add redux-thunk 혹은 npm i redux-thunk
redux-thunk 공식문서 👇
github.com/reduxjs/redux-thunk
반응형
'프로그래밍 > React' 카테고리의 다른 글
제너레이터(generator) (0) | 2021.04.21 |
---|---|
Redux-thunk와 Redux-saga 비교 (0) | 2021.04.20 |
'React' must be in scope when using JSX 오류 해결 (0) | 2021.04.13 |
Redux DevTools와 연동 방법(브라우저 개발자 도구) (0) | 2021.04.12 |
[React/오류해결]'react-scripts' 은(는) 내부 또는 외부 명령 실행할 수 있는 프로그램 또는 배치 파일이 아닙니다. (0) | 2021.04.08 |