Jua*_*ruz 7 reactjs redux-toolkit rtk-query
在我的 api 上,我有两个突变,奇怪的是,其中一个确实触发了重新获取,但另一个没有,我不知道为什么。这两种突变都会进行网络调用,并且更改会反映在服务器中。
这是我的 api 定义。
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/dist/query/react";
import Sample from "core/types/Sample";
import getApiURL from "core/utils/getApiURL";
export const lithologyApi = createApi({
baseQuery: fetchBaseQuery({ baseUrl: getApiURL() }),
tagTypes: ["Samples"],
endpoints: build => ({
addSample: build.mutation<Sample, Sample>({
query: sample => ({
url: `lithology/add-sample`,
method: "POST",
body: sample,
}),
invalidatesTags: ["Samples"],
}),
getSamples: build.query<Sample[], void>({
query: () => "lithology/get-samples",
providesTags: ["Samples"],
}),
deleteSample: build.mutation<void, number>({
query: id => ({ url: `lithology/delete-sample/${id}`, method: "DELETE" }),
invalidatesTags: ["Samples"],
}),
}),
});
export const {
useAddSampleMutation,
useGetSamplesQuery,
useDeleteSampleMutation,
} = lithologyApi;
Run Code Online (Sandbox Code Playgroud)
我不知道它是否相关,但成功使 ( addSample) 无效的突变位于不同的组件中,而没有 ( deleteSample) 的突变位于同一个组件中(我已经尝试将其移动到另一个组件,但没有)无论如何都行不通)。
因此,只是在这里给出答案,以便其他人可以使用它:
我假设您的deleteSample端点给出了空响应。默认情况下,fetchBaseQuery'sresponseHandler设置为json,因此它尝试使用JSON.parse空字符串 - 并因未处理的错误而崩溃。
未捕获的语法错误:JSON.parse:JSON 数据第 1 行第 1 列处的数据意外结束
现在,invalidateTags仅在成功和已处理invalidateTags错误时调用,但在未处理错误的情况下不会调用,因为如果您不是数组而是函数,这会导致各种不可预测的行为。
长话短说:在您的请求中,设置responseHandler为text或自定义函数。
另外,始终阅读错误 - 当您从钩子中读取到上面的错误时,它应该已经变得非常明显了:)
| 归档时间: |
|
| 查看次数: |
9360 次 |
| 最近记录: |