例如,我使用反应路由器切换到其他页面:
let t: T = serde_json::from_str(r#"{"i":1,"f":321.456}"#).unwrap();
println!("i: {}, f: {}", t.i, t.f);
// prints i: 1, f: 321.456
有了swr,当我不是第一次访问该页面时,就可以立即获取数据。 但是,每次我访问该页面时,它都会调用api来获取数据。
如果我不需要重新验证数据是否陈旧,是否只能获取一次数据?
答案 0 :(得分:0)
SWR
概念基于hooks
。这意味着它意味着要与本地状态一起使用,而不是与mobx
/ redux
/ etc等全局状态一起使用。当然,您可以通过创建自定义上下文,通过React Context
与全局状态一起使用。但是您会更喜欢使用mobx
/ redux
吧?
因此,这是一种缓存策略。如果您更喜欢在内存中缓存,请使用mobx
/ redux
。否则,请存储在localStorage
/ cookie
/ etc中。
答案 1 :(得分:0)
只需使用 dedupingInterval ,例如:
const { data } = useSWR(
`https://api.thecatapi.com/v1/breeds?api_key=51e7b5a4-3b54-4fdf-a61a-84b653d85f8a`,
fetcher,
{
dedupingInterval: 1000000,
}
);
答案 2 :(得分:0)
SWR 0.3.8
您应防止由以下选项控制的自动重新验证:
{
revalidateOnFocus: false,
revalidateOnMount:false,
revalidateOnReconnect: false,
refreshWhenOffline: false,
refreshWhenHidden: false,
refreshInterval: 0,
}
根据documentation refreshWhenOffline
,refreshWhenHidden
和refreshInterval
在默认情况下处于禁用状态,因此只需设置以下内容即可:
{
revalidateOnFocus: false,
revalidateOnMount:false,
revalidateOnReconnect: false,
}
这将限制SWR运行获取方法。但是,您仍然需要先运行一次才能获取数据。
您最终可能会遇到这样的情况:
const useStaleSWR = (dataKey) => {
const revalidationOptions = {
revalidateOnMount: cache.has(dataKey), //here we refer to the SWR cache
revalidateOnFocus: false,
revalidateOnReconnect: false,
};
return useSWR(dataKey, fetcher, revalidationOptions);
}
开始,SWR缓存已公开
毕竟,我不建议为此目的使用SWR。 SWR用于再次获取数据。如果您有静态数据,则只需提取一次并存储在会话/本地存储中,或者定义自己的缓存即可。
答案 3 :(得分:0)
使用此配置会使请求在一小时内仅调用一次。如果您需要更多时间,只需增加重复数据删除间隔即可。
const { data, error } = useSWR('/api/get.json', fetcher, {
dedupingInterval: 3600000,
revalidateOnFocus: false,
revalidateOnReconnect: false,
});
答案 4 :(得分:-1)
您可以将revalidateOnFocus
设置为false
,以防止SWR在窗口重新显示时重新生效。