使用 watchEffect 同步表格列显隐配置到 localStorage,需监听响应式列配置(如 columns 或 tableOption.column),在回调中结合用户账号与路由路径生成唯一 key 并写入;组件挂载时需主动读取缓存恢复配置,可加防抖优化高频更新。

直接用 watchEffect 同步表格列显隐配置到本地缓存,关键在于让它自动追踪列配置变化、触发写入,并兼顾用户身份和路由上下文。它比 watch 更简洁,适合这种“只要变了就存”的场景。
明确监听目标:列配置对象或其关键字段
不要监听整个表格 option 对象,聚焦真正影响显隐的字段,比如 column 数组(Avue 中列配置通常挂在此处)。确保该数据是响应式的(ref 或 reactive)。
- 如果是
ref包裹的列配置:const columns = ref([...]),直接监听columns.value或整个columns - 如果是
reactive的表格 option:const tableOption = reactive({ column: [...] }),监听() => tableOption.column,避免深层变更被忽略
在 watchEffect 内完成读取、拼接 key、写入 localStorage
watchEffect 会自动收集依赖并立即执行一次,所以首次渲染时就能把当前列状态存进去。写入逻辑要包含用户标识和页面路径,保证配置按人、按页隔离。
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 从 Vuex 或 Pinia 中获取当前用户账号(如
userInfo.account),或从路由中提取唯一路径($route.path) - 组合缓存 key:
`${userInfo.account}_${$route.path}` - 写入前做简单校验,避免空数组或 undefined 被存入:
if (Array.isArray(columns.value)) localStorage.setItem(key, JSON.stringify(columns.value))
配合页面加载时恢复配置,形成闭环
watchEffect 只管“变后存”,不负责“进来读”。需要在组件初始化阶段(如 onMounted)主动读取缓存,并赋值回列配置变量,否则用户刷新页面后配置就丢了。
立即学习“前端免费学习笔记(深入)”;
- 读取时使用相同 key:
const cached = localStorage.getItem(`${userInfo.account}_${$route.path}`) - 解析并合并:如果缓存存在且是合法 JSON,用
JSON.parse(cached)赋给columns.value;注意处理解析失败的情况(try/catch) - 避免覆盖初始配置逻辑:恢复应在初始值设置之后、表格渲染之前完成
可选增强:加防抖避免高频写入
如果列配置频繁变动(比如拖拽调整顺序),连续触发 watchEffect 可能造成大量 localStorage 操作。可在写入前加简易防抖:
- 定义一个延迟函数:
let timer = null; clearTimeout(timer); timer = setTimeout(() => { /* 写入逻辑 */ }, 300) - 或使用
lodash.debounce封装写入方法,在watchEffect回调里调用 - 注意:防抖后首次变更不会立刻保存,但对用户体验影响小,且更节省资源

















