V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lisongeee  ›  全部回复第 1 页 / 共 44 页
回复总数  865
1  2  3  4  5  6  7  8  9  10 ... 44  
4 小时 50 分钟前
回复了 Duanye7X24 创建的主题 生活 中年以后是不是只有烟,酒才是最忠实的朋友
就我一个滴酒不沾,被吸二手烟,觉得酒难喝,烟恶心的人?
🐂🍺,但是注意开源协议和版权声明,小心被何同学偷去了
1 天前
回复了 qwingmix 创建的主题 问与答 做一下调研,你吃过破宗丹大蜜丸吗?
那你现在突破到斗宗了没
1 天前
回复了 chevalier 创建的主题 Android 2025 年 1 月帮推荐个安卓手机
小米提供了一键关闭所有广告的入口,不用手动进每个软件关

设置 - 搜索广告 - 系统广告 - 关闭系统工具广告
3 天前
回复了 kandaakihito 创建的主题 生活 你们过年打算给父母钱吗?
@zbowen66

我的微信备注就是这个,你还以为是敏感字替换啊
另外一个最简单的方法就是

把有关系的页面写在一个 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 ,避免内存泄露
7 天前
回复了 zhwguest 创建的主题 支付宝 只愿意用微信支付的原因
聊天和支付最好分开

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

此外如果你在函数里访问了外部 const 变量但是此时 const 变量还未初始化,也会报错
33 天前
回复了 Anoyou 创建的主题 NAS 求这个刮削 app 或 docker 名?
1  2  3  4  5  6  7  8  9  10 ... 44  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
Developed with CodeLauncher
♥ Do have faith in what you're doing.