我正在使用 Redux ToolkitcreateAsyncThunk
和Axios
异步请求。即使我输入了一个明显错误的 URL(应该返回 404)作为端点,似乎也永远不会发送被拒绝的操作。我知道 StackOverflow 中有很多与此相关的问题,但肯定有一些我无法理解的东西,因为我已经好几个小时没能解决这个问题了。
这是我的 Redux 切片文件:
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";
const name = "listings";
const initialState = {
data: [],
loading: false,
error: null
};
export const fetchListings = createAsyncThunk(
"listings/requestStatus",
async () => {
const response = await axios.get(
"lorem-ipsum-dolor-sit-amet"
//"https://jsonplaceholder.typicode.com/todos"
);
return response.data;
}
);
const slice = createSlice({
name,
initialState,
extraReducers: (builder) => {
builder.addCase(fetchListings.pending, (state) => {
console.log("pending");
state.data = [];
state.loading = true;
state.error = null;
});
builder.addCase(fetchListings.fulfilled, (state, action) => {
console.log("fulfilled");
state.data = action.payload;
state.loading = false;
state.error = null;
});
builder.addCase(fetchListings.rejected, (state, action) => {
console.error("rejected");
state.data = [];
state.loading = false;
state.error = action.error.message;
});
}
});
export const selectListings = (state) => ({
data: state[name].data,
loading: state[name].loading,
error: state[name].error
});
export default slice.reducer;
我尝试尝试/捕获 Axios 调用并使用rejectWithValue
帮助程序,但似乎没有任何改变。这是一个复制问题的代码框。Redux slice 位于store/listings
并导致组件src/Listings
失败。
如果您删除 lorem-ipsum... 错误的 uri 并取消注释 jsonplaceholder 端点,您可以很容易地看到一切正常。故意使用错误的 uri 来触发 404 错误并获得分派的拒绝操作,不幸的是,这根本没有发生。