localStorage封装代码

localStorage封装

JSON.stringfy()和JSON.parse()

JSON.stringfy(): 将 JS 对象转化为 JSON 字符串。

javascript 复制代码
const obj = { name: 'John', age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // {"name":"John","age":30}

JSON.parse(): 将 JSON 字符串转化为 JS 对象,键值都必须使用双引号包裹。

javascript 复制代码
const jsonString = '{"name":"John","age":30}';
const obj = JSON.parse(jsonString);
console.log(obj); // { name: 'John', age: 30 }

常用场景:

  1. 让 localStorage / sessionStorage 可以存储对象。
    localStorage / sessionStorage默认只能存储字符串,实际开发中,我们往往需要存储的数据多为对象类型,此时我们就可以在存储时利用 JSON.stringify() 将对象转为字符串,而在取缓存时,只需 JSON.parse() 转回对象即可。
  2. 实现对象深拷贝。
  3. 与后端 API 通信的时候,通常会接收到 JSON 格式的响应,JSON.parse() 可以将其解析为 JavaScript 对象,方便在客户端进行处理。

localStorage

封装:

javascript 复制代码
export class LocalStorage {
  static read = (key: string) => {
    const readObj = window?.localStorage?.getItem(key);
    try {
      return JSON.parse(readObj);
    } catch (err) {
      console.log(`READ from localStorage "${key}" - `, err);
    }
  };

  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  static write = (key: string, value: any) => {
    window?.localStorage?.setItem(key, JSON.stringify(value));
  };

  static remove = (key: string) => {
    window?.localStorage?.removeItem(key);
  };
}

封装作用:

  1. localStorage 只能存字符串类型的数据,在存取的时候封装了 JS 对象和字符串之间转换。
  2. 抽象了操作:通过静态方法的形式,将对存储的读取、写入和删除操作进行了抽象和封装,使得调用方可以直接通过类的静态方法来进行操作,而无需关心底层的实现细节。提高了代码的可读性和可维护性,使得代码结构更加清晰,易于理解和维护。
  3. 提供了异常处理:在读取数据时,对 JSON 解析可能出现的异常进行了捕获和处理,并输出错误日志,避免了因为数据格式不正确而导致的程序崩溃或异常情况。

使用:

javascript 复制代码
export enum EStorageKey {
  JOINED_TOUR = 'JOINED_TOUR',
}

const storageJoinedTours = LocalStorage.read(EStorageKey.JOINED_TOUR);
相关推荐
小妖6662 分钟前
react-router 怎么设置 basepath 设置网站基础路径
前端·react.js·前端框架
xvmingjiang8 分钟前
Element Plus 中 el-input 限制为数值输入的方法
前端·javascript·vue.js
XboxYan25 分钟前
借助CSS实现自适应屏幕边缘的tooltip
前端·css
极客小俊26 分钟前
iconfont 阿里巴巴免费矢量图标库超级好用!
前端
小杨 想拼33 分钟前
使用js完成抽奖项目 效果和内容自定义,可以模仿游戏抽奖页面
前端·游戏
yvvvy36 分钟前
🐙 Git 从入门到面试能吹的那些事
前端·trae
狂炫一碗大米饭37 分钟前
事件委托的深层逻辑:当冒泡不够时⁉️
javascript·面试
张柏慈1 小时前
JavaScript性能优化30招
开发语言·javascript·性能优化
EmmaGuo20151 小时前
flutter3.7.12版本设置TextField的contextMenuBuilder的文字颜色
前端·flutter
pepedd8642 小时前
全面解析this-理解this指向的原理
前端·javascript·trae