react-cache / suspense中的invalidate_createResource无效

时间:2019-02-06 16:38:05

标签: reactjs invalidation react-cache

如何使react-cache创建的资源无效?

我可以从API获取数据:

const FooResource = createResource(id => fetch(`/foo/${id}`)); // return a promise, or async/await

// inside render...
const fooResponse = FooResource.read(id); // suspends if not in cache; renders if in cache
return <div> {fooResponse} </div>;

但是,当我更新后端的数据时,我无法重新获取前端的数据。

这是我唯一能找到的官方文档:https://github.com/sw-yx/fresh-concurrent-react/blob/master/apis/react-cache.md

我可以使用一些未公开的API吗?

4 个答案:

答案 0 :(得分:5)

通常-您不能这样做,这就是为什么它“不稳定”的原因。除了演示和修补之外,请勿将其用于其他任何用途。我们可能会用不同的API替换整个内容。

答案 1 :(得分:1)

到目前为止,react-cache使用LRU最近最少使用)缓存策略。根据此政策,最近最少使用的条目将首先失效。

可以使用功能unstable_setGlobalCacheLimit设置缓存的大小。

我在the project中找不到用于显式缓存无效的函数。我也认为这是个好消息,因为dealing with cache通常很麻烦。对于大多数React用户来说,LRU似乎将使它变得更容易。

随着越来越多的开发人员接受这项技术并发现需要自定义方法的新用例,手动缓存控制可能会在react-cache的未来版本中找到其方法,但是我怀疑这是现在应该考虑的事情。

答案 2 :(得分:1)

使用react-cache需要对缓存进行更多控制。看来它只考虑了客户端渲染(尽管它同时适用于csr和ssr)。

在服务器上,在给定的时间间隔内,极有可能只需要缓存少数几个特定的​​API。所有用户特定的API或数据都不应缓存在react-cache中。

由于两种环境具有完全不同的用例,因此反应缓存应提供控制以区分客户端和服务器上的缓存行为。

答案 3 :(得分:0)

当前,react-cache源代码没有指向任何invalidation功能。需要invalidation来更新结果,例如在您添加新评论或帖子之后,以及将suspensepost/put/delete个请求(不应该是{默认情况下,{1}}首先。