8

我有一个应用程序与切片和重击作出反应。我使用@reduxjs/toolkit,并使用“createSlice”api 创建了切片,并使用“createAsyncThunk”创建了 thunk。

我的想法:

export const loginThunk = createAsyncThunk('login/local', async (loginData: LoginData) => {

    const {username, password} = loginData;
    
    const l = await axios.post(`${BASE_URL}_login/local`, {username, password}, {
        headers: {'Content-Type': 'application/json'}
    })
    return l.data;
})

在我的应用程序中,在我的真实服务器上运行带有模拟 api 和“直通”的 mirage 服务器。

当我发送“loginThunk”thunk 时,它会在我的减速器中运行“loginThunk.pending”案例并停止。

永远不会实现或拒绝。

如果我在没有运行 mirage 服务器的情况下发送“loginThunk”thunk,它就可以工作。

如果我在没有运行 mirage 服务器的情况下发送“loginThunk”thunk,但我使用“fetch”而不是 axios,它就可以工作。

似乎是 axios 和 mirageJs passthrough 之间的问题。

有任何想法吗??

太感谢了

4

2 回答 2

1

原来问题源于在 axios 0.21.2 中更改的xhr适配器。处理程序request.onreadystatechange不再添加到请求中(XMLHttpRequest似乎在您启动 mirageJS 服务器时重新定义)。

解决方案是创建您自己的适配器 - 基本上复制 lib/adapters/xhr.js 并确保语句的else分支if通过 - 并在您的 axios 配置中使用它。

于 2021-11-30T10:36:44.233 回答
1

我解决了将 axios 降级为 miragejs0.21.0并与 miragejs 一起使用的问题:0.1.41、、0.1.42.00.1.43.0

于 2022-01-08T17:52:37.967 回答