vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储

目录

一、基本用法(原生 API)

1. 存储数据

2. 获取数据

3. 删除数据

二、Vue3 中封装成工具函数(推荐)

三、以上工具函数在 Vue3 组件中使用

1. 在选项式 API 中使用

2. 在组合式 API(setup 语法糖)中使用

四、将存储结合 Pinia 实现响应式存储(高级用法)

1. 在组件中使用

五、注意事项

一、基本用法(原生 API)

本地存储和会话存储的核心 API 完全一致,区别在于:

  • localStorage:数据持久化存储,关闭浏览器后不会丢失(除非手动清除)
  • sessionStorage:数据仅在当前会话有效,关闭标签页 / 浏览器后自动清除
1. 存储数据
// 存储到本地存储
localStorage.setItem('userName', '张三'); // 存储字符串
localStorage.setItem('userInfo', JSON.stringify({ id: 1, name: '张三' })); // 存储对象(需序列化)// 存储到会话存储
sessionStorage.setItem('token', 'abc123');
sessionStorage.setItem('cart', JSON.stringify([{ id: 1, name: '商品' }]));
2. 获取数据
// 从本地存储获取
const userName = localStorage.getItem('userName'); // 获取字符串
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}'); // 获取对象(需反序列化)// 从会话存储获取
const token = sessionStorage.getItem('token');
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
3. 删除数据
// 删除单个数据
localStorage.removeItem('userName');
sessionStorage.removeItem('token');// 清空所有数据
localStorage.clear();    //清空本地存储
sessionStorage.clear();    //清空会话存储

二、Vue3 中封装成工具函数(推荐)

为了更方便使用,可以将以上这些方法封装成工具函数,放在 utils/storage.js 中,封装如下:

// 本地存储工具函数
export const LocalStorage = {// 设置数据set(key, value) {if (typeof value === 'object') {value = JSON.stringify(value);}localStorage.setItem(key, value);},// 获取数据get(key) {const value = localStorage.getItem(key);if (!value) return null;// 尝试解析为对象try {return JSON.parse(value);} catch (e) {return value; // 解析失败则返回原始字符串}},// 删除数据remove(key) {localStorage.removeItem(key);},// 清空所有数据clear() {localStorage.clear();}
};// 会话存储工具函数
export const SessionStorage = {set(key, value) {if (typeof value === 'object') {value = JSON.stringify(value);}sessionStorage.setItem(key, value);},get(key) {const value = sessionStorage.getItem(key);if (!value) return null;try {return JSON.parse(value);} catch (e) {return value;}},remove(key) {sessionStorage.removeItem(key);},clear() {sessionStorage.clear();}
};

三、以上工具函数在 Vue3 组件中使用

1. 在选项式 API 中使用
<template><div><p>用户名:{{ userName }}</p><button @click="saveUser">保存用户信息</button></div>
</template><script>
import { LocalStorage } from '@/utils/storage';export default {data() {return {userName: ''};},mounted() {// 组件挂载时获取本地存储的数据this.userName = LocalStorage.get('userName') || '未登录';},methods: {saveUser() {// 保存数据到本地存储LocalStorage.set('userName', '张三');LocalStorage.set('userInfo', { id: 1, age: 20 });this.userName = '张三';}}
};
</script>
2. 在组合式 API(setup 语法糖)中使用
<template><div><p>Token:{{ token }}</p><button @click="saveToken">保存Token</button></div>
</template><script setup>
import { ref, onMounted } from 'vue';
import { SessionStorage } from '@/utils/storage';// 响应式变量
const token = ref('');// 组件挂载时获取会话存储的数据
onMounted(() => {token.value = SessionStorage.get('token') || '无';
});// 保存数据到会话存储
const saveToken = () => {SessionStorage.set('token', 'abc123456');token.value = 'abc123456';
};
</script>

四、将存储结合 Pinia 实现响应式存储(高级用法)

如果需要让存储的数据在组件中保持响应式(数据变化时自动更新视图),可以结合 Pinia 状态管理,如下:

import { defineStore } from 'pinia';
import { LocalStorage } from '@/utils/storage';export const useStorageStore = defineStore('storage', {state: () => ({// 从本地存储初始化数据(响应式)userInfo: LocalStorage.get('userInfo') || {},theme: LocalStorage.get('theme') || 'light'}),actions: {// 更新用户信息并同步到本地存储setUserInfo(info) {this.userInfo = info;LocalStorage.set('userInfo', info); // 同步到本地存储},// 更新主题并同步到本地存储setTheme(theme) {this.theme = theme;LocalStorage.set('theme', theme);}}
});
1. 在组件中使用
<template><div><p>用户名称:{{ storageStore.userInfo.name }}</p><button @click="updateUser">更新用户信息</button></div>
</template><script setup>
import { useStorageStore } from '@/stores/storage';const storageStore = useStorageStore();const updateUser = () => {storageStore.setUserInfo({ id: 1, name: '李四', age: 25 });
};
</script>

五、注意事项

  1. 存储容量限制:localStorage 和 sessionStorage 通常有 5MB 左右的容量限制,不适合存储大量数据
  2. 数据类型限制:只能存储字符串,对象 / 数组需要通过 JSON.stringify() 序列化
  3. 安全性:存储在本地的信息容易被篡改,敏感数据(如密码)不应直接存储
  4. 跨域限制:不同域名之间不能共享 localStorage/sessionStorage 数据
  5. 响应式问题:直接修改 localStorage 不会触发 Vue 组件更新,需手动刷新或结合 Pinia 实现响应式

根据需求选择合适的存储方式:需要持久化的数据用 localStorage,临时会话数据用 sessionStorage。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97965.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flink】DataStream API:基本转换算子、聚合算子

目录基本转换算子映射&#xff08;map&#xff09;过滤&#xff08;filter&#xff09;扁平映射聚合算子按键分区&#xff08;keyBy&#xff09;简单聚合&#xff08;sum/min/max/minBy/maxBy&#xff09;规约聚合&#xff08;reduce&#xff09;基本转换算子 有如下POJO类用来…

从淘宝推荐到微信搜索:查找算法如何支撑亿级用户——动画可视化

本篇技术博文摘要 &#x1f31f; 本文通过动画可视化深入解析数据结构中的核心查找算法&#xff0c;从基础概念到高阶应用&#xff0c;全面覆盖顺序查找、折半查找、分块查找、B树/B树及散列查找的核心原理与实现细节。文章以动态演示为核心工具&#xff0c;直观展现算法执行过…

图像正向扭曲反向扭曲

在图像处理领域&#xff0c;正向扭曲&#xff08;Forward Warping&#xff09;和反向扭曲&#xff08;Backward Warping&#xff09;是两种核心的图像坐标映射与像素重采样技术&#xff0c;核心区别在于“像素映射的方向”——是从“原始图像”到“目标图像”&#xff0c;还是从…

【C语言】 第三课 函数与栈帧机制详解

1 函数的基本概念 在C语言中&#xff0c;函数是程序的基本执行单元。一个函数的定义包括返回类型、函数名、参数列表和函数体。例如&#xff1a; int add(int x, int y) { // 函数定义int z x y;return z; }在使用函数前&#xff0c;通常需要声明&#xff08; declaration&am…

多个大体积PDF文件怎么按数量批量拆分成多个单独文件

在现代社会中&#xff0c;电子文档在我们的身边无所不在&#xff0c;而PDF文件时我们日常接触非常多的文档类型之一。PDF由于格式稳定、兼容性好&#xff0c;因此经常被用于各行各业。但是&#xff0c;我们平时在制作或搜集PDF文件时&#xff0c;文件太大&#xff0c;传输和分享…

ansible-角色

角色 一、利用角色构造ansible playbook 随着开发更多的playbook&#xff0c;会发现有很多机会重复利用以前编写的playbook中的代码。或许&#xff0c;一个用于为某一应用配置MySQL数据库的play可以改变用途。通过利用不同的主机名、密码和用户来为另一个应用配置MySQL数据库。…

git命令行打patch

在 Git 里打 patch&#xff08;补丁&#xff09;其实就是把某些提交的改动导出来&#xff0c;生成一个 .patch 文件&#xff0c;方便别人用 git apply 或 git am 打进代码里。&#x1f539; 常用方式1. 基于提交导出 patch导出最近一次提交&#xff1a;git format-patch -1 HEA…

文华财经多空提示指标公式 变色K线多空明确指标 文华wh6赢顺多空买卖提示指标

XX:240C;YY:MA(C,1);A1:POW(XX,2)/360-POW(YY,2)/260;A5:EMA2(EMA2(A1,20),5),LINETHICK2;A6:A5*0.9999,COLORSTICK;A20:EMA2(EMA2(A5,20),5),LINETHICK2;A60:EMA2(EMA2(A20,20),5),LINETHICK2;支撑:HHV(A5,30),COLORRED;天数:BARSSINCE(A5HHV(A5,0));YL:REF(A5,1)2.79-天数*0.…

记录一个防重Toast

当我们已经对某个按钮做了防暴力点击&#xff0c;但是依然在业务上有些复杂交互的情况&#xff0c;需要我们封装一个防重Toast。针对这类情况&#xff0c;可以直接使用下面的showDebouncedToastdata class ToastInfo(val id: Any? null,val command: MediaCommandDebouncer.M…

在线测评系统---第n天

主要完成了退出登录前后的代码的实现&#xff0c;以及题目列表的查询1.退出登录前端引入了全局前置守卫&#xff0c;如果cookie里面没有token则直接跳转到login页面&#xff1b;有则直接跳转到layout页面&#xff0c;无需重新登录后端接收到退出登录&#xff0c;将token置为无效…

机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南

机器学习从入门到精通 - 卷积神经网络(CNN)实战&#xff1a;图像识别模型搭建指南 各位&#xff0c;是不是觉得那些能认出照片里是猫还是狗、是停车标志还是绿灯的AI酷毙了&#xff1f;今天咱们就撸起袖子&#xff0c;亲手搭建一个这样的图像识别模型&#xff01;别担心不需要你…

python sqlalchemy模型的建立

SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射&#xff08;ORM&#xff09;库&#xff0c;用于管理和操作关系数据库。它为 Python 开发者提供了一种用 Python 对象来运行和管理 SQL 数据库的方式。 目录 SQLAlchemy 的两个核心组成部分 SQLAlchemy 的主要功…

Rust中使用RocksDB索引进行高效范围查询的实践指南

在当今海量数据处理场景下,高效的范围查询能力成为许多系统的关键需求。RocksDB作为一款高性能的嵌入式键值存储引擎,其独特的LSM树结构和索引设计为范围查询提供了底层支持。本文将深入探讨如何在Rust中利用RocksDB的特性来实现高效范围查询,从键的设计原则到迭代器的工程实…

怎么做到这一点:让 Agent 可以像人类一样 边听边想、边说,而不是“等一句话 → 一次性返回”

要实现“边听边想、边说”&#xff0c;核心是把整条链路做成全双工、分片流式、可中断的流水线&#xff1a; ASR 连续吐字 →&#xff08;短缓冲&#xff09;→ LLM 连续出 token&#xff08;可抢断&#xff09;→ TTS 连续合成并播放&#xff08;可打断/续播&#xff09;。 下…

Ubuntu 22.04 网络服务安装配置

Ubuntu 22.04 网络服务安装配置 一键安装所有服务 # 更新系统 sudo apt update# 安装所有服务 sudo apt install -y openssh-server vsftpd telnetd inetutils-inetd ftp telnet# 启动所有服务 sudo systemctl start ssh vsftpd inetutils-inetd sudo systemctl enable ssh vsf…

【Unity知识分享】Unity实现全局监听键鼠调用

1、实现该功能前&#xff0c;优先学习Unity接入dll调用Window系统接口教程 【Unity知识分享】Unity接入dll调用Window系统接口 2、初始化动态连接库后&#xff0c;进行脚本功能实现 2.1 创建脚本KeyBoardHook.h和KeyBoardHook.cpp&#xff0c;实现功能如下 KeyBoardHook.h …

深度学习篇---MNIST:手写数字数据集

下面我将详细介绍使用 PyTorch 处理 MNIST 手写数字数据集的完整流程&#xff0c;包括数据加载、模型定义、训练和评估&#xff0c;并解释每一行代码的含义和注意事项。整个流程可以分为五个主要步骤&#xff1a;准备工作、数据加载与预处理、模型定义、模型训练和模型评估。# …

k8s集群搭建(二)-------- 集群搭建

安装 containerd 需要在集群内的每个节点上都安装容器运行时&#xff08;containerd runtime&#xff09;&#xff0c;这个软件是负责运行容器的软件。 1. 启动 ipv4 数据包转发 # 设置所需的 sysctl 参数&#xff0c;参数在重新启动后保持不变 cat <<EOF | sudo tee …

【Docker】P1 前言:容器化技术发展之路

目录容器发展之路物理服务器时代&#xff1a;一机一应用的局限虚拟化时代&#xff1a;突破与局限并存容器化时代&#xff1a;轻量级的革新技术演进的价值体现各位&#xff0c;欢迎来到容器化时代。 容器发展之路 现代业务的核心是应用程序&#xff08;Application&#xff09;…

WPF依赖属性和依赖属性的包装器:

依赖属性是WPF&#xff08;Windows Presentation Foundation&#xff09;中的一种特殊类型的属性&#xff0c;特别适用于内存使用优化和属性值继承。依赖属性的定义包括以下几个步骤&#xff1a; 使用 DependencyProperty.Register 方法注册依赖属性。 该方法需要四个参数&…