sessionstorage 适合保存单次会话中临时的 ui 状态,如树形菜单展开节点 id 列表;页面关闭后自动清空,需在用户点击时实时存取 json 序列化的 id 数组,并注意同源限制与序列化约束。

SessionStorage 适合保存单次会话中临时的 UI 状态,比如用户展开的树形菜单节点。它的特点是页面关闭或标签页关闭后自动清空,正好匹配“单次浏览”的需求。
保存展开节点的 ID 列表
树形菜单通常由嵌套结构(如数组或对象)渲染,每个节点有唯一标识(如 id 或 key)。你不需要存整个节点数据,只需记录用户点击展开的节点 ID 即可。
- 每次用户点击展开/折叠时,用
sessionStorage.setItem('expandedNodes', JSON.stringify(idArray))保存当前所有已展开节点的 ID 数组 - 初始化菜单时,从 sessionStorage 读取并解析:
const expanded = JSON.parse(sessionStorage.getItem('expandedNodes') || '[]') - 遍历渲染时,检查节点 ID 是否在该数组中,决定是否默认展开
监听菜单操作并实时更新
不要等到页面卸载才保存 —— SessionStorage 是同步且轻量的,应在用户交互后立刻写入。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 给树节点的展开按钮绑定点击事件,在 handler 中更新数组(如用
includes判断、push/filter增删) - 更新后立即调用
sessionStorage.setItem,避免因意外刷新丢失状态 - 注意:不要直接修改原数组再保存,建议生成新数组后写入,避免引用污染
处理父子联动展开逻辑
如果菜单支持“展开父节点时自动展开子节点”,保存时仍只存用户主动点击的节点;还原时需额外计算依赖关系。
- 例如:用户点了 ID 为
'node-2'的父节点,你存['node-2'];但渲染时可根据树结构递归找出其所有后代节点,并标记为展开 - 反之,若用户只点了某个深层节点(如
'node-2-1-1'),则只存它自己,不自动展开上级——除非你的交互逻辑明确要求 - 关键点:保存的是“用户意图”,不是“最终视觉状态”,还原时按规则补全更可控
兼容性与边界情况提醒
SessionStorage 在现代浏览器中支持良好,但仍需注意几个实际细节:
- 同源限制:不同域名、协议、端口之间不共享;同一标签页的 iframe 若同源也可访问,需留意上下文
- 存储上限约 5–10MB,但树节点 ID 通常是短字符串,几百个也不到 1KB,完全够用
- 如果用户手动清除了浏览数据,或使用无痕模式,SessionStorage 也会为空,此时回退到默认状态即可
- 避免存函数、undefined、Symbol 等无法序列化的值 —— 只存 plain object、array、string、number、boolean
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










