-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
还在新鲜时间按钮点击数据会改变,且相同cachekey数据不能同步共享 #2313
Comments
验证了一下,发现是文档没有写清楚。我这里梳理一下: 文档里 cachekey 的介绍没有说明特殊情况。实际上 cacheKey 生效的前提是“请求要真的发送”,也就是“没有设置缓存”或“缓存过期了”。 这点代码中可见,分析如下:
后面我更新文档,注明这些点。 另外,想要实现任何状态下(即使数据被缓存)相同 cacheKey 的 useRequest 共享数据,需要修改现有实现,这将是个 Breaking Chanages。 对于你的用法,目前想要共享数据的话,不能设置缓存数据,staleTime, cacheTime 都不能用。 这个 issue 不用关,后面我完善了文档自动会关掉。 |
想请问一下,这个issue后续有跟进吗? 我现在需要设置 |
@RoyRao2333 我明白你的需求,但是要知道每个 useRequest 的“新鲜时间”是单独计算的,例如: const { refresh: refresh1 } = useRequest(() => login(), {
cacheKey: "share_key",
staleTime: 5 * 1000,
});
const { refresh: refresh2 } = useRequest(() => login(), {
cacheKey: "share_key",
staleTime: 10 * 1000,
}); 上述代码,由于两个 useRequest 都设置了 cacheKey,所以只要发起新请求了,就会共享数据。但是在各自的 staleTime 时间内,你去调用 refresh/run 方法发请求,都会走缓存的逻辑,不会触发新请求,此时不会共享数据。 我感觉可以满足你的需求,但是要注意,staleTime 不是全局共享的,各自单独计算。 |
@liuyib 感谢回复。
谢谢! |
目前没有
感觉你的需求和这个 issue 给的 codesandbox demo 不太一样。从 demo 看,这个 issue 需要的是:有 staleTime 的请求,在缓存期间也能给没有 staleTime 的请求共享数据。而你目前的需求,我的理解是:所有 cacheKey 相同的请求,共享 staleTime 并且 共享数据。多了一点“共享 staleTime” 不知道我对你需求的理解是否正确。不过确实数据共享这块,对缓存的支持不太优雅。 |
是的,需要对相同的cacheKey之间共享staleTime。我最初以为,订阅某一个cacheKey的时候,会同时继承其附加属性如staleTime和cacheTime。 但是每一个useRequest都会生成一个新的订阅,并且每个useRequest都可以设置自己单独的参数 😂 想来只能配合localStorage或者redux来存储,请求之前先检查是否有缓存了 |
是这样,需要自己处理了 |
https://codesandbox.io/s/du-qu-yong-hu-ming-cheng-forked-49m4rs?file=/App.tsx
The text was updated successfully, but these errors were encountered: