我已经成功地使用 Axios 编写了我的应用程序来获取内容。到目前为止,它设置为在发生某些事件时获取内容(例如单击提交按钮)。但是,我正在试验Redux 的 RTK-Query解决方案。这个包生成钩子,在它们的示例中,它们提供了简单的组件级示例,在挂载时调用钩子。
我怎样才能利用这些RTK-挂钩(和钩子一般的),所以我可以配合他们喜欢的行为onClick
,onSubmit
和有条件的事件?我知道这与钩子规则指南冲突,但我无法想象 RTK-Query 会受到如此限制,以至于只允许组件级 onMount API 调用。
我正在阅读一些相关文章,同时我试图弄清楚这一点/等待一个有用的例子:
- https://blog.logrocket.com/react-hooks-frustrations/
- https://redux-toolkit.js.org/rtk-query/usage/usage-without-react-hooks
第二篇文章似乎有些相关,但我觉得它离路径太远了,并且正在质疑它是否值得rtk-query
安装。我不妨直接使用,axios
因为它可以在我的组件和逻辑中的任何地方使用。有人可以教我如何解决这个问题吗?我是 rtk-query 的新手,它看起来很酷,但它的实现方法似乎也很严格。
这是我的api.ts
切片示例:
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
const apiEndpoint = 'http://localhost:5000';
export const myApi = createApi({
reducerPath: 'myApi',
baseQuery: fetchBaseQuery({ baseUrl: apiEndpoint }),
endpoints: builder => ({
getFileById: builder.query<any, { id: string; fileId: string }>({
query: arg => {
const { id, fileId } = arg;
return `/service/${id}/files/${fileId}`;
},
}),
}),
});
// RTK Query will automatically generate hooks for each endpoint query
export const { useGetFileByIdQuery } = myApi;
使用 axios 的通用示例:
const handleSubmit = async (): Promise<void> => {
try {
const getResponse = await axios.get('my-endpoint/abc/123');
}
catch (e) {
...
}
}