【问题标题】:React / Redux - Sending multiple patch requests onBlurReact / Redux - 发送多个补丁请求 onBlur
【发布时间】:2019-02-20 08:37:38
【问题描述】:

我正在使用 Redux-form 来编辑客人信息。当离开一个字段时,该字段的内容会通过一个简单的补丁请求修补给客人,并更新商店。我遇到的问题是,如果我使用同时编辑多个字段的 Google 表单,onBlur 函数也会同时发送所有请求。这会触发错误:

Unhandled Rejection (Error): Guest is already patching

我怎样才能使客人可以并行更新?

export function patchGuest(guest) {
  return (dispatch, getState) => {
    if (shouldPatchGuest(getState())) {
      dispatch(apiPatchGuest());
      return BookingApi.patchGuest(guest.id, guest.json())
        .then(response => {
          const json = response.data;
          const updatedGuest = Guest.asGuest(json);
          dispatch(setStateUpdateGuest(updatedGuest));
        })
        .catch(err => {
          dispatch(apiError(err));
          throw err;
        });
    }
    return Promise.reject(new Error('Guest is already patching'));
  };
}

-

patchOnBlur = (event) => {
    const { meta: { dirty, error }, dispatch, currentGuest, fieldName } = this.props;
    if (dirty && !error) {
      const patched = currentGuest.patch({
        [fieldName]: event.target.value
      });
      dispatch(patchGuest(patched));
    }
  };

提前致谢。

【问题讨论】:

    标签: javascript reactjs redux redux-form


    【解决方案1】:

    最终安装了 redux-saga 并通过排队请求解决了这个问题。随时纠正此问题或进行改进。这绝不是完成的代码。

    function* patchGuest(action) {
      const dataToPatch = {
        action.fieldName: action.fieldValue,
      }
      try {
        yield call(
          Api.patchGuest, 
          action.id,
          dataToPatch
        );
        yield put({ 
          type: "BOOKING_SET_STATE_UPDATE_GUEST",
          id: action.id, 
          fieldName: action.fieldName, 
          fieldValue: action.fieldValue 
        });
      } catch (e) {
        // yield put({ type: "GUEST_PATCH_FAILED", message: e.message });
      }
    }
    
    function* watchPatchGuest() {
      const requestChan = yield actionChannel('SAGA_BOOKING_API_PATCH')
      while (true) {
        const payload = yield take (requestChan);
        yield call(patchGuest, payload)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2013-11-16
      相关资源
      最近更新 更多