代码之家  ›  专栏  ›  技术社区  ›  aaronfg

RTK查询createApi()端点未在Typescript中显示为挂钩

  •  0
  • aaronfg  · 技术社区  · 3 年前

    尝试使用RTK query进行简单的基本查询,然后使用定义我的api createApi() ,当我试图破坏api以获取钩子时,Typescript给了我错误。

    然后,我从文档中复制粘贴了pokemon示例代码,即使这样,也意味着钩子不存在。

    很明显我错过了什么。

    这是代码, pulled right from the docs 但是具有字符串返回类型:

    export const pokemonApi = createApi({
        reducerPath: 'pokemonApi',
        baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
        endpoints: (builder) => ({
          getPokemonByName: builder.query<string, string>({
            query: (name) => `pokemon/${name}`,
          }),
        }),
    })
      
    export const { useGetPokemonByNameQuery } = pokemonApi;
    

    那个 useGetPokemonByNameQuery 是显示错误的内容:

    Property 'useGetPokemonByNameQuery' does not exist on type 'Api<BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, { getPokemonByName: QueryDefinition<...>; }, "pokemonApi", never, unique symbol>'.
    

    我做错了什么?

    0 回复  |  直到 3 年前
        1
  •  4
  •   Lin Du Correcter    3 年前

    @reduxjs/toolkit:1.9.5

    来自 /rtk-query/api/created-api/overview#react-hooks 文件:

    核心RTK Query createApi方法与UI无关,就像Redux核心库和Redux Toolkit与UI无关一样。它们都是可以在任何地方使用的普通JS逻辑。

    但是,RTK Query还提供了为每个端点自动生成React挂钩的功能。由于这具体取决于React本身,RTK Query提供了一个替代入口点,该入口点公开了包含该功能的createApi的自定义版本

    如果您使用了createApi的React特定版本,那么生成的Api切片结构也将包含一组React钩子。

    同样的钩子也被添加到Api对象本身,并根据端点名称和查询/突变类型自动生成名称。

    确保 createApi 从以下路径导入函数:

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

    不是:

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

    完整的示例可以找到 here