javascript - redux saga 删除功能

标签 javascript reactjs redux-saga

我正在开发React/Redux应用程序,我必须删除用户地址,我使用redux saga作为中间件,功能工作正常,但问题是删除地址后请求没有输入deleteAddressByBuyerIdAddressIdSuccess (在saga.js文件中),只输入deleteAddressByBuyerIdAddressIddeleteAddressByBuyerIdAddressIdFailure(已在redux开发者工具中检查过),任何人都可以帮我解决吗这个问题,

下面给出了我的 redux 开发者工具的所有功能和屏幕截图

Action 文件

/* Delete an address for a buyer */
const deleteAddressByBuyerIdAddressId =
    (buyerId: string, addressId: string, address: Object, params: string) => ({
        type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID,
        buyerId,
        addressId,
        address,
        params,
    });

const deleteAddressByBuyerIdAddressIdSuccess =
    (buyerId: string, addressId: string, address: Object, params: string) => ({
        type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_SUCCESS,
        buyerId,
        addressId,
        address,
        params,
    });

const deleteAddressByBuyerIdAddressIdFailure =
    (errorMessage: Object) => ({
        type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_FAILURE,
        errorMessage,
    });
<小时/>

传奇文件

/* Delete Buyers address */
function* deleteAddressByBuyerIdAddressId(action) {
    try {
        const response = yield call(
          api.account.deleteAddressByBuyerIdAddressId,
          action.buyerId,
          action.addressId,
          action.address,
          action.params
        );
        if (response.ok && response.data  && {}.hasOwnProperty.call(response.data, 'data')) {
            yield put(
          Actions.deleteAddressByBuyerIdAddressIdSuccess(
              action.buyerId,
              action.addressId,
              response.data,
              action.address,
              action.params
          )
      );
        } else {
            yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(response.errorMessage));
        }
    } catch (error) {
        yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error));
    }
}
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> {
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId);
}
<小时/>

reducer

export const deleteAddressByBuyerIdAddressId = (state: Object = INITIAL_STATE) => ({
    ...state,
    isLoading: true,
    successMessage: null,
    errorMessage: null,
});

export const deleteAddressByBuyerIdAddressIdSuccess = (state: Object = INITIAL_STATE, action: Object) => {
     const successMessage = I18n.getText('account.address-deleted', {}, 'Address deleted!');
     return {
        ...state,
        address: action.address,
        successMessage: successMessage,
      }
};

export const deleteAddressByBuyerIdAddressIdFailure = (state: Object = INITIAL_STATE, action: Object) => ({
    ...state,
    errorMessage: action.errorMessage,
    isLoading: false,
});
<小时/>

redux 开发者工具 View

enter image description here

<小时/>

最佳答案

您不需要 if, else 部分。相反,如果请求成功,只需在 try block 本身内调用成功操作。否则,在 catch block 内调用失败操作。那会为你完成这项工作。这是示例代码。

/* Delete Buyers address */
function* deleteAddressByBuyerIdAddressId(action) {
    try {
        const response = yield call(
          api.account.deleteAddressByBuyerIdAddressId,
          action.buyerId,
          action.addressId,
          action.address,
          action.params
        );
            yield put(
          Actions.deleteAddressByBuyerIdAddressIdSuccess(
              action.buyerId,
              action.addressId,
              response.data,
              action.address,
              action.params
          )
      );
    } catch (error) {
        yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error));
    }
}
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> {
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId);
}

关于javascript - redux saga 删除功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46026560/

相关文章:

javascript - 使用 jQuery 动画回调无法正确更新我的 Angular 模型

javascript - 我如何告知 React 组件它应该渲染的空间的宽度?

reactjs - 如何在 React Native 中使用 i18next 显示文本和超链接

javascript - redux saga 的简单磁带 js 测试因未定义而失败

javascript - Redux-Saga 非 ajax 相关回调问题

javascript - 将自定义元素添加到 ngRepeat 列表

javascript - 如何使用 jQuery 在 DOM 上移动多个 div

javascript - 如何用JS模拟按键?

reactjs - create-react-app - 如何捆绑 JS 文件

javascript - redux-saga - 如何处理多次调用回调的 API 方法