-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
icejs 支持路由级别的React Keep Alive #3875
Comments
@imsobear 有相同场景诉求,微前端由A页面(or 子应用)切换到B页面再切回A页面时,希望页面保持上次的状态,例如:当前选中第几个tab状态,table翻页停留在第几页状态,搜索框状态。总之,所有状态不需要重置。目前,感觉没有好的通用方案。 |
@imsobear 类似umi的umi-plugin-keep-alive功能,借助react-activation实现的 |
Keep Alive 方案对于路由级别的 Keep Alive 方案,常见的场景会有三种情况:
结合状态管理的 Keep Alive如果组件内大部分状态均通过状态管理方案进行维护,可以保持状态不销毁 每次组件切换后均从 store 中读取上一次的状态数据进行渲染
组件级别 Keep Alive组件级别 Keep Alive 最大的问题在于,部分组件的数据逻辑相对比较复杂:组件内部通过 useState 维护了自身的状态,包括一些表单输入状态。如果这些状态均通过手动保存状态的方式来 Keep Alive,将会有较大的成本。 方案社区常见做法将渲染组件缓存在一个不会被卸载的组件内部,等下一次目标组件重新渲染时,再通过 DOM 操作将缓存的真实内容移入到对应的组件节点下。比如 结合 icejs 一键开启能力参见PR 微前端 Keep Alive微前端架构中的每次应用切换都将会执行上一个微应用的卸载的生命周期,如果想对微应用 Keep Alive 需要进行如下改造:
方案针对 icestark 微前端方案在 React 主应用使用场景上封装了 AppRouter 的方式,如果需要一键启用 Keep Alive 能力,则需要 AppRouter 内部支持或者提供相应的钩子函数来完成上述改造要点 使用方式: <AppRouter>
<AppRoute {...rest} keepAlive />
</AppRouter> 存在的问题:
|
请问一下当前是否能够解决在ice +icestark的场景下当切换不同的icestark支持子应用的keep-alive @ClarkXia |
请问当前所使用的ice+icestark 主应用和子应用都有需要使用到keep-alive 时应该如配合呢 |
主应用使用 keep-alive 的方式 应该是应用间相互切换的时候保留数据,这块会涉及多应用共存冲突以及路由响应的解决,近期我们会整体设计下 |
请问一下build-plugin-keep-alive有清理的配置吗? 场景是这样的:Tab导航模式,切换导航时,会回到keepalive的页面,关闭该导航重新打开菜单时,需要重新mount |
keep-alive 的使用单独整理个文档吧 |
结合 |
@zh-rocco 请问这个问题解决了吗? |
发生了什么?
当前开发的的产品中有使用到icework 和 icestark 所提供的技术能力,目前需求提出需要保障页面在切换后保留上一次的操作内容。
复现步骤,错误日志以及相关配置
需求举例:A页面路由到B页面再从B页面返回A页面希望保留A页面上一次的状态数据。
期望的结果是什么
希望ICE框架能够支持路由级别的 React Keep Alive。
相关环境信息
The text was updated successfully, but these errors were encountered: