React Thunk는 액션 객체 대신 함수를 반환하는 액션 생성자를 작성할 수 있는 미들웨어입니다. 이는 API 요청이나 복잡한 동기 논리(예: 조건부 작업 디스패치)와 같은 비동기 작업을 처리하는 데 유용합니다. 반환된 함수는 디스패치 및 getState를 인수로 수신하여 다른 작업을 디스패치하거나 함수 내의 현재 상태에 액세스할 수 있도록 합니다.
다음은 React 앱에서 redux-thunk를 사용하는 방법에 대한 기본 예입니다.
// Action Creator with Thunk export const fetchUser = () => { return async (dispatch) => { dispatch({ type: 'FETCH_USER_REQUEST' }); try { const response = await fetch('/api/user'); const data = await response.json(); dispatch({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (error) { dispatch({ type: 'FETCH_USER_FAILURE', payload: error }); } }; };
React Saga는 제너레이터 함수를 사용하여 Side Effect를 보다 체계적으로 처리할 수 있는 미들웨어입니다. Thunk와 같은 함수를 반환하는 대신 "효과" 시스템을 사용하여 비동기 작업을 관리하고 논리 흐름을 제어합니다. Sagas는 전달된 작업을 수신하고 API 호출, 데이터 가져오기 및 기타 작업과 같은 부작용을 수행할 수 있는 장기 실행 백그라운드 프로세스입니다.
redux-saga를 사용하는 방법에 대한 기본 예는 다음과 같습니다.
import { call, put, takeLatest } from 'redux-saga/effects'; // Worker saga: will be fired on FETCH_USER_REQUEST actions function* fetchUser(action) { try { const response = yield call(fetch, '/api/user'); const data = yield response.json(); yield put({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (e) { yield put({ type: 'FETCH_USER_FAILURE', message: e.message }); } } // Watcher saga: spawns a new fetchUser task on each FETCH_USER_REQUEST function* mySaga() { yield takeLatest('FETCH_USER_REQUEST', fetchUser); } export default mySaga;
측면 | 반응 썽크 | 리액트 사가 |
---|---|---|
개념 | 액션 생성자의 함수를 반환합니다. | 부작용에 대해 생성기 기능을 사용합니다. |
학습 곡선 | 배우고 사용하기가 더 쉬움 | 생성기로 인한 더 높은 학습 곡선 |
비동기 흐름 | 간단한 비동기 논리 처리 | 복잡한 비동기 워크플로에 더 적합 |
코드 구조 | 구조가 적고 대규모 앱에서 지저분해질 수 있음 | 명확하고 구조화된 접근 방식을 제공합니다 |
테스트 | 테스트가 더 어려울 수 있습니다. | 생성기로 인해 테스트가 더 쉬움 |
사용 사례 | 간단한 비동기 로직, API 요청 | 복잡한 흐름(예: 시퀀스, 재시도) |
성능 | 경량 | 더 강력하지만 약간 더 많은 오버헤드 |
React Thunk 사용 다음과 같은 경우:
React Saga 사용 다음과 같은 경우:
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3