【发布时间】:2022-01-05 20:10:39
【问题描述】:
我有一个MediaCard 组件,它包含一个img 元素和一个带有令牌的url。必须首先需要此令牌才能获取图像。这里需要注意的是令牌将在 30 秒后过期。应该是这样的:
const MediaCard = () => {
// This should refetch the token everytime a new component is
// mounted and 30 seconds has passed since the last fetch
const { data: token, error: tokenError, isLoading: tokenIsLoading } = useGetTokenQuery(undefined, { refetchOnMountOrArgChange: 30 });
if (tokenError) return 'Error'
if (tokenIsLoading) return 'Loading skeleton'
return (
<img url={`/url/${token}/image1.jpg`}
)
当我只有一个 MediaCard 组件时,一切正常。当我安装第一张媒体卡,加载令牌然后渲染图像时,问题就开始了。然后,如果我让 30 秒过去,当我尝试挂载新的 MediaCard 时,钩子将开始重新获取令牌,但保留旧数据。这带来了两个不同的问题:
- 当新组件挂载时,由于我们有一个过期的令牌作为数据,图像将无法加载。然后,在接收到新令牌后,图像将重新渲染并开始工作。
- 一旦收到新的令牌,所有以前安装的图像都会重新渲染。我希望在使用有效令牌渲染图像后保持这种方式并且不再渲染。
也许解决方案不是关于 RTK Query,而是 React 本身。
【问题讨论】:
标签: reactjs redux redux-toolkit rtk-query