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
英文地址,請注明出處:http://en.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 方法注冊依賴屬性。 該方法需要四個參數&…