gloriaJun / react-realworld-example-app

https://gloriajun.github.io/react-realworld-example-app/
0 stars 0 forks source link

Set redux-saga structure #13

Open gloriaJun opened 5 years ago

gloriaJun commented 5 years ago

https://medium.com/@FourwingsY/redux-redux-saga-%EB%A1%9C-async-%EB%8B%A4%EB%A3%A8%EA%B8%B0-b7b9a9110356

gloriaJun commented 5 years ago
gloriaJun commented 5 years ago
function* apiSaga(api, asyncAction, options) {
  yield put(asyncAction.request())
  try {
    const payload = options && options.apiPayload
    const result = yield call(api, payload)
    yield put(asyncAction.success({ result }))
  } catch (error) {
    const failAction = asyncAction.fail({ error })
    yield call(errorHandler, failAction)
    yield put(failAction)
  }
}
export function* fetchNoticesSaga(action) {
  yield call(apiSaga, NoticesAPI.getNotices, fetchNotices, {
    apiPayload: action.payload,
  })
}

https://medium.com/@FourwingsY/redux-redux-saga-%EB%A1%9C-async-%EB%8B%A4%EB%A3%A8%EA%B8%B0-b7b9a9110356

gloriaJun commented 4 years ago
export default function* sagaCreator(action, api, { payload }) {
  const { pending, success, fail } = action;
  const { onSuccess, onError, ...data } = payload || {};

  yield put(pending());
  try {
    const result =
      typeof api === 'function' ? yield call(api, ObjectUtils.isObject(payload) ? data : payload) : yield all(api);
    yield put(success(result));
    onSuccess && onSuccess();
  } catch (error) {
    yield put(fail({ error }));
    onError && onError();
  }
}
gloriaJun commented 4 years ago

export default function* sagaCreator(actionApi, resultData, onSuccess, onError) { const { pending, success, fail } = actionApi;

yield put(pending()); try { yield put(success(resultData)); onSuccess && onSuccess(); } catch (error) { yield put(fail({ error })); onError && onError(error); } }