localStorage 命名冲突
大众化解决方案
新建一个 config.js,再在 utils 目录下新建 storage.js,给所有 key 拼接一个前缀:
// config.js
export default {
APP_NAME: 'new-electric-bicycle-web', // 工程名
};
// storage.js
import Config from '../../config';
const prefix = Config.APP_NAME;
export default {
get(key) {
key = `${prefix}-${key}`;
const value = localStorage.getItem(key);
if (!value) return null;
return JSON.parse(value);
},
set(key, value) {
key = `${prefix}-${key}`;
localStorage.setItem(key, JSON.stringify(value));
},
remove(key) {
key = `${prefix}-${key}`;
localStorage.removeItem(key);
},
clear() {
const len = localStorage.length;
const keys = [];
for (let i = 0; i < len; i++) {
const key = localStorage.key(i);
if (key && key.startsWith(prefix)) keys.push(key);
}
keys.forEach(k => localStorage.removeItem(k));
}
};
str.startsWith(''); // 字符串是否以 '' 开头
补充:除了"加前缀"以外,还有几种避免冲突的思路:
- 按业务 / 模块拆 namespace:
user:profile,order:list,便于按前缀清理。 - 统一封装工具函数:所有读写都走
storage模块,禁止业务代码直接调用localStorage。 - 加密 / 压缩 key:避免可读性太好被外部脚本猜到(注意:仅是混淆,不是真正的安全方案)。
- 使用第三方库:
localforage(支持 IndexedDB / WebSQL 兜底)、store.js。
来源整理自:我的有道云笔记



