为什么我会得到这个Redux Toolkit错误(使用了标记类型,但没有在`tagTypes`中指定!)?

tpxzln5u  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(116)

我有一个React Native应用程序,我目前正在配置它,以便使用我的API从数据库中获取和改变数据。具体来说,我使用react redux toolkit中的createApi()来实现这一点。
在这一点上我只有

  • 一个突变来获得一个令牌
  • 用于获取用户信息的查询,其使用所述令牌

我目前正在尝试在另一个令牌发生变化时(因为可能是新用户登录)使缓存的用户信息无效。当然,最终会有一个中途注销,但现在这是我的目标。
这是我的API服务的代码:

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import * as SecureStore from 'expo-secure-store';

export const myApi = createApi({
    reducerPath: 'myApi',
    baseQuery: fetchBaseQuery({
        baseUrl: 'http://myApiServerUrl/api/',
        tagTypes: ['User'],
        prepareHeaders: async (headers) => {
            headers.set('content-type', 'application/json');
            const token = await SecureStore.getItemAsync('access_token');
            if (token) {
                headers.set('authorization', token);
            }
            return headers;
        }
    }),
    endpoints: (builder) => ({
        getToken: builder.mutation({
            query: (body) => ({
                url: 'token',
                method: 'POST',
                body,
            }),
            invalidatesTags: [{type: 'User', id: 'me'}]
        }),
        getMe: builder.query({
            query: () => `user/me`,
            providesTags: (result) => (result ? [{type: 'User', id: 'me'}] : [])
        }),
    })
})

export const { useGetTokenMutation, useGetMeQuery } = myApi;

字符串
这真的工作!但我得到了以下错误:

ERROR  Tag type 'User' was used, but not specified in `tagTypes`!


你们知道我做错了什么吗?看起来标签的定义是完全正确的。

jckbn6z7

jckbn6z71#

显然我只是定义错了。tagTypes参数将被定义在createApi输入对象上,而不是我放置它的地方。
因此,第一行代码

export const myApi = createApi({
    reducerPath: 'myApi',
    baseQuery: fetchBaseQuery({
        baseUrl: 'http://myApiServerUrl/api/',
        tagTypes: ['User'],

字符串
应该是

export const myApi = createApi({
    reducerPath: 'myApi',
    tagTypes: ['User'],
    baseQuery: fetchBaseQuery({
        baseUrl: 'http://myApiServerUrl/api/',


这个确实有效

相关问题