小工具知识网

当前位置: 首页 > 行业知识 > 前端(vue)数据存储方案

行业知识

前端(vue)数据存储方案

2026-11-07 16:25:09 来源:互联网转载

引言

本需求文档旨在明确前端项目中的数据存储需求,包括数据类型、数据结构、数据交互方式等。它定义了前端项目中需要存储和处理的数据,以及对这些数据进行访问和操作的要求。

功能需求

数据存储按数据类型分为 持久存储、内存存储(响应式)、内存存储(非响应式),根据不同的业务场景选择合适的存储方式。

持久存储(localStorage)

数据存储在本地磁盘,关闭网页或异常退出程序时数据不会被清除,可长期存在于磁盘中。可用于保存: 登录信息,程序设置信息等

export class LocalStorageConstant {  /**   * 用户 token   */  static USER_TOKEN = "USER:TOKEN";  /**   * 用户信息   */  static USER_INFO = "USER:INFO";  /**   * 微信信息   */  static WX_USER_INFO = "WX:USER:INFO";}export class LocalStorageUtil {  // 静态属性 引用 LocalStotrage 类的唯一实例对象  static localStorageUtil: LocalStorageUtil;  // 区分不同的环境,避免 iOS 小程序与小程序,小程序与公众号间本地存储混乱  public ecologyName: string | null;  // 私有化构造器  private constructor() {    this.ecologyName = store.getters.ecologyName;  }  // 提供一个外部可访问的的静态方法  public static getInstance() {    if (!this.localStorageUtil) {      this.localStorageUtil = new LocalStorageUtil();    }    return this.localStorageUtil;  }    /**   * 获取 Key   * @param key   * @returns   */  private getKey(key: string) {      key =this.ecologyName ?? ""  + ":" +  key;      return key.toUpperCase()  }  /**   * 保存本地   * @param key   * @param value   * @param expire 过期时间   * @returns   */  public setWithExpire(key: string, value: string, expire: number) {    if (!key) {      return;    }    key = this.getKey(key);    let now = new Date().getTime();    let expireTime = now + expire * 1000;    let info = { value: value, expireTime: expireTime };    localStorage.setItem(key, JSON.stringify(info));  }  /**   * 保存本地   * @param key   * @param value   * @returns   */  public set(key: string, value: string | null) {    if (!key || !value) {      return;    }    key = this.getKey(key);    let info = { value: value };    localStorage.setItem(key, JSON.stringify(info));  }  /**   * 获取本数据   * @param key   * @returns   */  public get(key: string) {    if (!key) {      return null;    }        key = this.getKey(key);    let value = localStorage.getItem(key);    if (!value) {      return null;    }    let info = JSON.parse(value);    if (info.expireTime != null && new Date().getTime() > info.expireTime) {      localStorage.removeItem(key);      return null;    }    return info.value;  }  /**   * 保存 token   * @param token   */  public setToken(token: string) {    this.set(StorageConstant.USER_TOKEN, token);  }  /**   * 获取 token   */  public getToken() {    return this.get(StorageConstant.USER_TOKEN);  }  /**   * 保存微信信息   * @param token   */  public setWxInfo(wxInfo: WechatUserInfo) {    this.set(StorageConstant.WX_USER_INFO, JSON.stringify(wxInfo));  }  /**   * 获取微信信息   */  public getWxInfo() {    return this.get(StorageConstant.WX_USER_INFO);  }}export default LocalStorageUtil.getInstance();

内存存储(响应式)store

数据存储与内存中不会进行持久化存储,关闭网页或异常退出程序时数据会被清除。可用与保存临时信息例如:邀请人信息,渠道信息

  • 响应式:数据改变时会引起页面刷新

    统一使用 store.getters.** 方式取值

    token: 登录信息userInfo: 用户信息wxUserInfo: 微信授权信息isShowLoginView: 是否显示登录      isShowLoadingView: 是否显示加载invitationCode: 邀请人标识码terminalType: 终端类型 iOS、ANDROID、OTHERecology: 运行环境 WECHAT、APP、MINIPROGRAM、OTHER,channel: 渠道ecologyName: 生态名loginSilentTicket: 静默登录票据browseUUID: 本次访问项目唯一标识version: 当前版本号

    内存存储(非响应式)

    仅做数据存储使用,数据改变不是自动引起页面刷新

    export class MemoryStorageConstant {  /**   * 用户 token   */  static USER_TOKEN = "USER:TOKEN";}export class MemoryStorageUtil {  // 静态属性 引用 LocalStotrage 类的唯一实例对象  static memoryStorageUtil: MemoryStorageUtil;  // 所有属性通过 Map 存储  private map: Record = {};  // 提供一个外部可访问的的静态方法  public static getInstance() {    if (!this.memoryStorageUtil) {      this.memoryStorageUtil = new MemoryStorageUtil();    }    return this.memoryStorageUtil;  }  /**   * 保存数据   * @param key   * @param value   * @param expire 过期时间   * @returns   */  public setWithExpire(key: string, value: string, expire: number) {    if (!key) {      return;    }    let now = new Date().getTime();    let expireTime = now + expire * 1000;    let info = { value: value, expireTime: expireTime };    this.map[key] = JSON.stringify(info);  }  /**   * 保存本地   * @param key   * @param value   * @returns   */  public set(key: string, value: string | null) {    if (!key || !value) {      return;    }    let info = { value: value };    this.map[key] = JSON.stringify(info);  }  /**   * 获取数据   * @param key   * @returns   */  public get(key: string) {    if (!key) {      return null;    }    let value = this.map[key];    if (!value) {      return null;    }    let info = JSON.parse(value);    if (info.expireTime != null && new Date().getTime() > info.expireTime) {      this.map[key] = null;      return null;    }    return info.value;  }  /**   * 获取数据并删除   * @param key   * @returns   */  public getAndDelete(key: string) {    if (!key) {      return null;    }    let value = this.map[key];    this.map[key] = null;    if (!value) {      return null;    }    let info = JSON.parse(value);    if (info.expireTime != null && new Date().getTime() > info.expireTime) {      return null;    }    return info.value;  }}export default MemoryStorageUtil.getInstance();

上一篇:怎样包装怎么设计作品?

下一篇:联盟地区服务器怎么选择?