StructureBuilder / react-keep-alive

A component that maintains component state and avoids repeated re-rendering.
MIT License
984 stars 106 forks source link

如何手动清除已经被缓存了的某个组件 #65

Open Myhappyboy opened 4 years ago

Myhappyboy commented 4 years ago

作者你好!如何将已缓存的组件清除,我尝试了在标签中 动态设置需要缓存匹配的数据、但是无效。请问有什么方法可以清除缓存。

ShenChang618 commented 4 years ago

@Myhappyboy 可以看下这个Contorl Cache

Myhappyboy commented 4 years ago

作者你好、能不能在不退回到上级页面的前提,清除指定页面的缓存

ShenChang618 commented 4 years ago

@Myhappyboy 能大致说一下需求不?刚刚那个例子需要退回上一级是因为它的需求是 首页 -> 列表页 会清除列表页的缓存;列表页 -> 详情页,不清除列表页的缓存。

Myhappyboy commented 4 years ago

项目是一个后台管理系统、通过点击菜单栏点击 A、内容显示区显示A页面、点击B切换显示B页面,顶部会有记录用户点击标签记录、如何实现直接清除B面的缓存。

ShenChang618 commented 4 years ago

@Myhappyboy 是要在什么情况下清除 B 页面的缓存呢?

Myhappyboy commented 4 years ago

管理系统中、鼠标右键后弹窗有一个刷新页面功能,需要清除缓存重新加载

ShenChang618 commented 4 years ago

@Myhappyboy 这种情况在代码中重新请求数据会更好一些吧,现在在 exclude 里面排除掉的页面会在下一次进入的时候才会清除掉缓存

dingtwo commented 4 years ago

image 同楼主的问题,项目中有 tab,tab 关闭的时候需要清除缓存 使用 includes 的方式清除缓存的时机有点晚,再次把 tab 打开的时候缓存列表里又把这个页面加进来了,会导致永远不能删除tab页面的缓存,有没有什么直接一点的方式

sinpor commented 4 years ago

image 同楼主的问题,项目中有 tab,tab 关闭的时候需要清除缓存 使用 includes 的方式清除缓存的时机有点晚,再次把 tab 打开的时候缓存列表里又把这个页面加进来了,会导致永远不能删除tab页面的缓存,有没有什么直接一点的方式

同样的需求,能否实现一个接口对缓存直接操作

lovesL commented 4 years ago

@sinpor 你解决了么

sinpor commented 4 years ago

@lovesL 暂时没有。 看文档上Provider提供includeprop,可以手动维护被缓存的组件达到删除的目的。但传入的数组不知道为何不能更新,永远是初始值,也有可能我的用法不对。 btw 感觉作者不维护了,很久都没更新过,准备看看别的。

kavience commented 4 years ago

已提交 PR ,具体请查看 https://github.com/StructureBuilder/react-keep-alive/pull/97

hcxmj commented 2 years ago

我这里应用了@react-three/drei渲染3D动画资源也会存在缓存,我都已经在每一级组件上加了key之后发现重新进入的时候还是会先闪一下上次的渲染产物再更新为新的组件界面