Vue 3 中逻辑复用怎么封装本地存储读写操作

酷杰大大_2125

酷杰大大_2125

2026-10-20

825人浏览

原创

最推荐的方式是封装 uselocalstorage 组合式函数,统一处理读写、响应式绑定、异常捕获及命名空间、过期时间等扩展能力。

vue 3 中逻辑复用怎么封装本地存储读写操作

用组合式函数封装 useLocalStorage

最推荐的方式是写一个 useLocalStorage 组合式函数,把读、写、响应式绑定和错误处理都收拢在一起。它返回一个 ref 响应式变量和可选的清除方法,直接在组件中解构使用:

  • 初始化时自动从 localStorage 读取,并做 JSON 解析(支持对象、数组、布尔值等)
  • 值变更时通过 watchEffect 自动序列化并写入,无需手动监听
  • 默认值支持传入任意类型,避免 undefined 或 null 导致逻辑异常
  • 内部处理了 JSON 解析失败、存储超限等常见异常,不中断主线程

示例代码(/src/composables/useLocalStorage.js):

import { ref, watchEffect } from 'vue'
<p>export default function useLocalStorage(key, defaultValue) {
let raw = null
try {
const item = localStorage.getItem(key)
raw = item ? JSON.parse(item) : null
} catch (e) {
console.warn(<code>[useLocalStorage] 解析 ${key} 失败</code>, e)
}</p><p>const data = ref(raw !== null ? raw : defaultValue)</p><p>watchEffect(() => {
try {
localStorage.setItem(key, JSON.stringify(data.value))
} catch (e) {
console.error(<code>[useLocalStorage] 写入 ${key} 失败</code>, e)
}
})</p><p>const clear = () => {
localStorage.removeItem(key)
data.value = defaultValue
}</p><p>return [data, clear]
}</p>

加命名空间和前缀避免冲突

多个模块或团队共用 localStorage 时,容易因 key 重名互相覆盖。可以在封装层统一加前缀,比如 vue_app_:

  • 所有 key 自动拼接前缀:localStorage.setItem('vue_app_theme', ...)
  • 读取时也带前缀匹配,不影响其他应用或库的存储项
  • 支持按模块设置子命名空间,例如 vue_app_user::settings

这样既保持项目内 key 的语义清晰,又规避跨应用污染风险。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习