我在我的服务器上创建了一个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
函数。是我理解错了,还是有更好的方法来实现自动重新获取过期令牌的行为?
1条答案
按热度按时间scyqe7ek1#
到目前为止,我提出的最好的答案是添加一个与时间长度相同的
pollingInterval
。这不是我想要的,虽然已经很接近了。更多信息:https://redux-toolkit.js.org/rtk-query/usage/polling