SessionStorage 可保存多级联动菜单选中路径,需用嵌套对象(如{province:"北京",city:"朝阳区",district:"建国路"})结构化存储并统一键名"menuSelection";选择时逐级更新、清空下级字段,页面加载时解析恢复并逐级渲染;用户操作后同步更新,登出或模块切换时主动清理。

SessionStorage 可以很好地保存多级联动菜单中用户当前选中的项,页面刷新后仍能恢复状态,但需注意层级关系的结构化存储和读取逻辑。
用嵌套对象结构存菜单选中路径
多级联动菜单(如省→市→区)的选中状态不能只存最后一级,而应保存完整路径。推荐用类似 { province: "北京", city: "朝阳区", district: "建国路" } 的对象格式存入 SessionStorage,键名可统一为 "menuSelection"。
- 选择某省时,只写入
province字段,清空city和district - 切换城市时,更新
city,同时清空district - 选择区域后,三者都写入,确保路径完整
- 使用
JSON.stringify()存储,JSON.parse()读取,避免直接存对象导致序列化失败
初始化菜单时从 SessionStorage 恢复状态
页面加载或组件挂载时,应主动读取 sessionStorage.getItem("menuSelection"),解析后逐级触发菜单更新。
- 先渲染省级列表,再根据是否存在
province值自动选中并加载对应市级数据 - 有
city时,在市列表中高亮并请求区级数据 - 所有层级都设好后,再设置最终选中样式(如
aria-current="true"或 CSS 类) - 若解析失败或值为空,按默认逻辑(如首项)初始化,不中断流程
联动变化时同步更新 SessionStorage
每次用户操作导致菜单层级变化,都要及时更新 SessionStorage,保持与 UI 一致。
- 监听下拉选择、点击事件等交互源,获取当前层级的值和上下文
- 读出现有状态对象,仅修改当前及后续层级字段(例如改了市,就删掉 district)
- 调用
sessionStorage.setItem("menuSelection", JSON.stringify(newState)) - 避免频繁写入:同一操作周期内多次变更,可防抖或合并更新
注意生命周期与清理边界
SessionStorage 默认在标签页关闭后清除,但某些场景需主动管理,比如用户退出登录或切换业务模块。
- 用户登出时,调用
sessionStorage.removeItem("menuSelection")避免残留旧数据 - 跨模块跳转且菜单结构不兼容时,可重置该 key
- 不建议监听
beforeunload清理,因可能影响正常刷新恢复 - 调试时可用浏览器开发者工具的 Application → Storage → Session Storage 查看实时内容
不复杂但容易忽略的是层级依赖关系的清除逻辑——改上级必须清下级,否则会出现“北京市”下还显示“杭州市西湖区”这类错位状态。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











