redux RTK查询API自动重取

vfwfrxfs  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(130)

我在我的服务器上创建了一个API来为Apple WeatherKit API生成一个JWT令牌。我想在我的React SPA中使用这个代币。我正在使用Redux Toolkit和createAPI连接到我的服务器后端。
我的createAPI实现看起来像这样:

export const generalApi = createApi({
    reducerPath: 'api',
    tagTypes: [ 'settings' ],
    baseQuery: fetchBaseQuery({
        baseUrl: 'https://api.myserver.com/v1/',
        prepareHeaders: (headers, { getState })=> {
            const token = getState().session.token;

            if (token) {
                headers.set('authorization', `Bearer ${token}`);
            }

            return headers;
        }
    }),
    endpoints: (builder)=> ({
        getWeatherKitToken: builder.query({
            query: ()=> 'getWeatherKitToken',
            forceRefetch: ({ endpointState })=> {
                console.log('checking for refetch');
                return (endpointState.data.expires < Date.now());
            },
            providesTags: [ 'settings' ]
        }),
        login: builder.mutation({
            query: (body)=> ({
                url: 'login',
                method: 'POST',
                body: body
            }),
            invalidatesTags: [ 'settings' ]
        }),
    }),
});

它的用法是这样的:

const { data } = useGetWeatherKitTokenQuery();

我希望当用户登录时(标签“设置”无效),或者当令牌的超时(这是由API提供的)时,我的令牌会自动重新获取。我知道在组件挂载或焦点或其他方面有不同的重取选项,尽管我只在令牌过期或用户会话更改时需要重取。
但是,无论是初始组件挂载还是组件重新挂载,都不会调用forceRefetch函数。是我理解错了,还是有更好的方法来实现自动重新获取过期令牌的行为?

scyqe7ek

scyqe7ek1#

到目前为止,我提出的最好的答案是添加一个与时间长度相同的pollingInterval。这不是我想要的,虽然已经很接近了。
更多信息:https://redux-toolkit.js.org/rtk-query/usage/polling

相关问题