我正在开发React/Redux应用程序,我必须删除用户地址,我使用redux saga作为中间件,功能工作正常,但问题是删除地址后请求没有输入deleteAddressByBuyerIdAddressIdSuccess (在saga.js文件中),只输入deleteAddressByBuyerIdAddressId和deleteAddressByBuyerIdAddressIdFailure(已在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
<小时/>最佳答案
您不需要 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/