标签: rtk-query

在函数内部使用 RTK-Query 挂钩的方法?

我已经使用 Axios 成功编写了我的应用程序来获取内容。截至目前,它已设置为在发生某些事件时获取内容(例如单击提交按钮)。但是,我正在尝试Redux 的 RTK 查询解决方案。该包生成挂钩,并在其示例中提供了在挂载时调用挂钩的简单组件级示例。

我如何利用这些 rtk-hook(以及一般的钩子),以便将它们与 、 和条件事件等行为联系onClick起来onSubmit我知道这与hooks 规则准则相冲突,但我无法想象 RTK-Query 会受到如此限制,只允许组件级 onMount API 调用。

当我试图解决这个问题/等待一个有用的例子时,我正在阅读一些相关文章:

第二篇文章似乎有些相关,但我觉得它偏离了道路太远,并且正在质疑它是否值得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 => { …
Run Code Online (Sandbox Code Playgroud)

reactjs redux react-hooks redux-toolkit rtk-query

25
推荐指数
2
解决办法
3万
查看次数

如何全局使RTK查询缓存失效(重置状态)?

项目使用redux工具包和rtk查询。数据是从一个 api 获取的,但代码被分成更小的块以反映逻辑部分,例如

  • /汽车
  • /用户
  • /设置

...ETC

注销后,rtk 查询会保留其状态,因此下次登录时数据是旧的。它们甚至可能不反映当前用户。如何使所有缓存失效?

rtk-query

23
推荐指数
3
解决办法
4万
查看次数

RTK 查询 createApi 结果:“类型‘Api&lt;BaseQueryFn&gt; 上不存在属性‘....’”

以下代码使用 RTK 查询创建 Redux Hook:

export const specialtiesApi = createApi({
    reducerPath: 'specialtiesApi',
    baseQuery: fetchBaseQuery({ baseUrl: 'https://someplace.com/' }),
    endpoints: (builder) => ({
        getSpecialties: builder.query({
            query: (name) => `specialties`,
        }),
    }),
});

export const { useGetSpecialtiesQuery } = specialtiesApi;
Run Code Online (Sandbox Code Playgroud)

最后一行代码抛出 Typescript 编译时错误:

Property 'useGetSpecialtiesQuery' does not exist on type 'Api<BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, { getSpecialties: QueryDefinition<...>; }, "specialtiesApi", never, unique symbol>'
Run Code Online (Sandbox Code Playgroud)

我的代码改编自https://redux-toolkit.js.org/rtk-query/usage-with-typescript使用 Typescript 4.3.5。

我看不出有什么问题。有任何想法吗?

typescript react-redux redux-toolkit rtk-query

22
推荐指数
1
解决办法
2万
查看次数

RTK 查询使用 getState() 从另一个切片获取状态

我昨天刚开始使用 redux,在阅读了不同的库后,我决定使用 RTK 的切片路线。

对于我的异步,我决定使用 RTK 查询,而不是使用 createAsyncThunk,并且我有一个关于从另一个切片访问状态的正确方法的问题。

slice1 包含一些用户数据,例如:

export const initialState: IUserState = {
   name: 'example',
   id: null,
};
Run Code Online (Sandbox Code Playgroud)

在我的 slice2 中,我有一个函数想要执行getSomethingByUserId(id)和我当前的实现之类的操作:

interface IApiResponse {
  success: true;
  result: IGotSomethingData[];
}

const getsomethingSlice: any = createApi({
  reducerPath: 'api',
  baseQuery: fetchBaseQuery({
    baseUrl: 'https://someapibase',
  }),
  endpoints(builder) {
    return {
      fetchAccountAssetsById: builder.query<IApiResponse, null>({
        query() {
          console.log('store can be called here', store.getState().user.id);
          return `/apipath?id=${store.getState().user.id}`;
        },
      }),
    };
  },
});

export default getsomethingSlice;
export const { useFetchAccountAssetsByIdQuery } = getsomethingSlice;
Run Code Online (Sandbox Code Playgroud)

正如我在某处读到的,markikson 提到导入 …

reactjs redux redux-thunk redux-toolkit rtk-query

21
推荐指数
1
解决办法
2万
查看次数

RTK查询-无限滚动,保留现有数据

我正在尝试在我们当前的应用程序中实现无限滚动功能;

我们首先获取页面的前 5 个“帖子”。滚动到页面底部后,我们会获取接下来的 5 篇帖子。

这很好用,但是使用相同的查询意味着现有数据(前 5 个帖子)已被新数据替换。

是否可以将现有数据与新数据合并?

我可以将它们合并到位,例如使用类似的内容;const posts = [newPosts, oldPosts]但如果现有数据被修改,我们就会失去 RTK 查询提供的数据失效。

对于这种情况,推荐的方法是什么?

react-redux redux-toolkit rtk-query

19
推荐指数
2
解决办法
2万
查看次数

有没有办法获取 api 切片 [RTK 查询] 中存储的所有响应?

这是根据页面返回数据的钩子

    const {
        data,
        isFetching,
        isLoading,
        isError,
    } = useGetResourceQuery(page, perPage );
Run Code Online (Sandbox Code Playgroud)

这是 API

    export const api = createApi({
        baseQuery: fetchBaseQuery({
            baseUrl: "http://localhost:3001",
        
        }),
        tagTypes: ["resource"],
        endpoints: (build) => ({
            getResource: build.query({
            query: (page = 1, perPage = 20) =>
                `resource?spage=${page}&limit=${perPage}`,
            }),
        }),
    });
    export const {useGetResourceQuery} = api
Run Code Online (Sandbox Code Playgroud)

有什么方法可以提取所有查询的状态吗?我想实现基于滚动的分页(无限滚动)需要更新中间件吗?或者有什么方法可以访问状态并将其公开为上面的函数,我浏览了文档但找不到解决方案

我可以使用本地状态并将它们连接起来,但想知道是否可以使用 RTK

谢谢

reactjs redux redux-toolkit rtk-query

18
推荐指数
3
解决办法
1万
查看次数

React Redux:如何处理 RTK 查询/突变打字稿中的错误?

我正在使用带有 RTK 突变的 Typescript,一切正常,但如果我以特定 JSON 格式从后端发送任何错误,例如:

{ 
   status: "Error",
   message "Something went wrong"
}
Run Code Online (Sandbox Code Playgroud)

当我检查浏览器网络选项卡时,它会向我显示正确的错误响应,例如:

{
   data: { 
      status: "Error",
      message "Something went wrong"
    }
}
Run Code Online (Sandbox Code Playgroud)

我在突变挂钩中遇到错误:

const [createCategory, {isLoading, error }] = useCreateCategoryMutation();
Run Code Online (Sandbox Code Playgroud)

但我无法error.data.message在我的反应中访问它给我的类型错误,例如:

类型“FetchBaseQueryError | ”上不存在属性“数据” 序列化错误'。

typescript reactjs redux rtk-query

18
推荐指数
2
解决办法
2万
查看次数

在 RTK 查询中添加 ProvideTags 时出现类型错误

我正在尝试使用 RTK 查询为我的项目设置缓存失效,但在遵循官方文档时出现类型错误。目标是使获取的资源列表中的单个项目无效,但我在尝试提供一个通用标签时陷入困境:

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const remoteScriptsApi = createApi({
    baseQuery: fetchBaseQuery({
        baseUrl: '/api', prepareHeaders: (headers) => {
            headers.set('Accept', 'plain/text, application/json');
            return headers;
        }
    }),
    endpoints: (builder) => ({
        getScenes: builder.query<number[], void>({
            query: () => ({ url: '/scenes' }),
            providesTags: ['Scenes']
        }),
    })
})
Run Code Online (Sandbox Code Playgroud)

['Scenes'] 带有下划线,显示以下错误消息:

Type 'string' is not assignable to type 'FullTagDescription<never>'.ts(2322)
Run Code Online (Sandbox Code Playgroud)

我对 TypeScript 还很陌生,但我仍然尝试深入研究 RTK 查询的类型文件,以找出预期“从不”的位置和原因。但运气不好。

如果我的项目和/或代码需要更多背景信息,请告诉我!谢谢!

typescript reactjs rtk-query

18
推荐指数
1
解决办法
8232
查看次数

React-router v6 中的 BrowserRouter 和 createBrowserRouter 有什么区别?我可以在不使用数据 API 的情况下使用 createBrowserRouter 吗?

我已在文档中阅读过此内容,但我不确定BrowserRouter和之间有什么区别createBrowserRouter

这就是文档中所说的:

创建浏览器路由器:

这是所有 React Router Web 项目的推荐路由器。它使用 DOM History API 来更新 URL 并管理历史堆栈。

它还支持 v6.4 数据 API,如加载器、操作、获取器等。

浏览器路由器:

A<BrowserRouter>使用干净的 URL 将当前位置存储在浏览器的地址栏中,并使用浏览器的内置历史记录堆栈进行导航。

我的第二个问题是:

我可以createBrowserRouter在不添加数据 API(如加载器、操作等)的情况下使用吗?原因是我不确定如何将数据 API 与 Redux Toolkit Query 一起使用,而且我发现来源有限。我也许可以稍后添加加载器。

reactjs react-router react-router-dom rtk-query

18
推荐指数
1
解决办法
1万
查看次数

RTK 查询中的 Chain 2 查询

如果第二个查询需要第一个查询返回的参数,那么链接查询的正确方法是什么?

const { data: user } = useGetUserQuery();
Run Code Online (Sandbox Code Playgroud)

用户对象包含一个用于运行的ID

const { data: userBio} = useGetUserBioQuery(user.id);
Run Code Online (Sandbox Code Playgroud)

如何确保第二个仅在第一个完成后运行?

javascript reactjs redux react-redux rtk-query

17
推荐指数
2
解决办法
1万
查看次数