-
[React] redux-saga - take, takeEveryFrontend/react 2020. 3. 15. 03:27
현재 프로젝트엔 take로 코드를 작성해서
여기에 takeEvery에 대한 간략한 설명을 남기고자 한다.
redux-saga는 미들웨어에서 백그라운드로 실행되어 reducer와 마찬가지로 action을 캐치해 실행된다.
- take의 경우 ACTION을 캐치해 함수를 실행시킨다.
- takeEvey의 경우 무한하게 take를 실행하는 것으로 while(true)문 안에 take를 실행하는 것이라 생각하면 된다.
소스를 바로 보자
아래 두 코드는 같은 동작을 한다.
// take 사용 function* takeFetchActionSaga() { while(true){ const action = yield take('FETCH_ACTION'); const result = yield call(() => fetch('/api/data'); yield put({ type: 'FETCH_ACTION_SUCCESS', payload: result.json() }); } }
// takeEvery 사용 function* takeFetchActionSaga() { yield takeEvery('FETCH_ACTION', getData) } function* getData(action) { const result = yield call(() => fetch('/api/data')) yield put({ type: 'FETCH_ACTION_SUCCESS', payload: result.json() }) }
// take 사용 function* takeFetchActionSaga() { while(true){ const action = yield take('FETCH_ACTION'); const result = yield call(() => fetch('/api/data'); yield put({ type: 'FETCH_ACTION_SUCCESS', payload: result.json() }); } }
'Frontend > react' 카테고리의 다른 글
[react] react-router 특정 URL로 바로 접근시 '404 페이지를 찾을 수 없습니다.' 에러 해결방법! (0) 2020.10.05 [React] react에서 jscrambler로 코드 난독화(obfuscation) (0) 2020.03.16 [react][javascript] gps 위치 얻기 위도 경도 latitude/longitude (0) 2020.03.09 [react] Parse Error: Adjacent JSX elements must be wrapped in an enclosing tag (0) 2020.03.09 [react] react-starter-kit에 bootstrap 적용 시키기. (0) 2020.03.09