V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lisongeee  ›  全部回复第 2 页 / 共 44 页
回复总数  879
1  2  3  4  5  6  7  8  9  10 ... 44  
另外一个最简单的方法就是

把有关系的页面写在一个 route 下,不要发生 router.push 行为,没有组件销毁,状态自然也不会丢失
根本原因在于 react-router/vue-router 使用的是替换渲染式路由,push route 时旧页面状态会全部丢失

如果是 android 的 activity 这种层叠式渲染路由,push route 时旧页面只是被覆盖,并没有回收,所以不会出现这种情况,缺点是占用内存较多

此外在微信小程序的 taro(也是 react) 框架,微信小程序的路由机制也是 webview 层叠渲染(旧路由不会被销毁),没有你说的这个问题,缺点也是内存占用,但是没人在意。

而 android 的新 ui compose(类似 react) 也切换至 compose-navigation 这种替换式渲染式路由,也是会丢失状态的(不做任何操作的情况下)

但是 compose-navigation 额外对接了 viewModel 框架

开发者需要提升状态声明在 viewModel 中,然后在路由页面里使用它,当发生 push 行为时,页面停止渲染,但是 viewModel 并不会被回收,因为它的生命周期是跟着路由栈存在的,所以当你返回上一个页面时,重新渲染此页面,由于 ui=f(state) ,state 都在,所以状态都在。

并且 compose 还会提供如 rememberSaveable/rememberScrollState 这种保留状态的 hooks ,也是跟着路由栈存在,所以很好的解决了你提出的这个问题。

---

按照 compose 的解决思路,你必须把所有状态提升到 viewModel 中,也就是 store/url 里,并且你得构建一个和 url 栈联系的 store ,避免内存泄露
33 天前
回复了 zhwguest 创建的主题 支付宝 只愿意用微信支付的原因
聊天和支付最好分开

哪天你在微信里说了对某热点事件什么不利于团结的话被封号就好受了
新状态组件的 useEffect 和旧状态组件的 cleanup 同时被你 debugger 到了
43 天前
回复了 kandaakihito 创建的主题 生活 你们过年打算给父母钱吗?
我 元旦/春节/劳动节/中秋+国庆 都会给 8🐎转钱
可以使用 GitHub Action 自动编译
57 天前
回复了 DIO 创建的主题 Android Java 中可以做到函数嵌套吗
你的 js 能运行是因为 function 有变量提升,你换成 const 就不行了而且会报错

此外如果你在函数里访问了外部 const 变量但是此时 const 变量还未初始化,也会报错
59 天前
回复了 Anoyou 创建的主题 NAS 求这个刮削 app 或 docker 名?
64 天前
回复了 mereith 创建的主题 开源软件 写开源项目被骂了
支持网友以暴制暴,看的是真爽,希望以后这种无理傻逼少点
65 天前
回复了 magic3584 创建的主题 Android 怎么在 Java 里调用 Kotlin 的 suspend 方法
```kt
suspend fun updateArea(context: Context): Boolean {
TODO()
}

fun syncUpdateArea(context: Context): Boolean {
return runBlocking { updateArea(context) }
}
```
65 天前
回复了 humbass 创建的主题 JavaScript css 的 justify-content 等效语法?
你说的可能是 align-items

在 flex/grid 主轴和交叉轴互换方向的情况下,可以使用 align-items: center 达到 justify-content: center 的效果

@Livid #1 是 AI 无效回复
1  2  3  4  5  6  7  8  9  10 ... 44  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2268 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 01:26 · PVG 09:26 · LAX 17:26 · JFK 20:26
Developed with CodeLauncher
♥ Do have faith in what you're doing.