vue3,pinia状态管理,手写插件实现持久化

状态管理和持久化

先简单概述一下状态管理和持久化

  • 状态管理:使任意两个组件共享数据
  • 持久化:将共享的数据保存在本地,不随页面销毁而消失

         要实现状态的持久化,可以直接采用插件的形式实现,插件其实就是一个函数,所以根据这些原理,可以手写一个函数将数据保存在本体,重启页面时优先读取出来,这就是一个持久化插件的功能

persist.js

要实现持久化的效果,重点在两个功能:1.保存数据;2.优先读取

首先安装好pinia 并准备一个简单的store,可以参考:vue3状态管理,pinia的使用_vue3usestore的用法 pinia-CSDN博客

npm install pinia
import {defineStore} from 'pinia'

export const useStore = defineStore('counter', {
    state: () => {
        return {
            // 定义状态
            counter: 0
        }
    },
    // 定义计算属性
    getters: {
        // 定义计算属性
        getCounter: (state) => {
            return state.counter>=5?state.counter:"数据不足"
        }
    },
    // 定义操作
    actions: {
        // 定义操作
        addCounter() {
            this.counter++
        }
    }
    // 定义其他选项
    // ...
})
import {defineStore} from 'pinia'
import {ref,computed} from 'vue'

export const useStore = defineStore('counter', ()=>{
    const counter = ref(0);
    
    const getCounter = computed(() => {
        return counter.value>=5?counter.value:"数据不足"
    })
    const addCounter = () => {
        counter.value++
    }
    return{
        counter,
        getCounter,
        addCounter
    }
})

这是两个书写风格,这里采用更简洁的第二种作为示例,

在src下新建一个plugins文件夹,在新建一个js文件persist.js这个js文件就是持久化插件

在main.js中使用插件

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

import persist from './plugins/persist' //引入插件

const app = createApp(App);
const pinia = createPinia();

pinia.use(persist);// 注册持久化插件
app.use(pinia);
app.mount('#app');

persist插件

在persist插件中,有一个参数,store状态的上下文 

export default function(context){
  console.log(context);
}

注意几个关键的值,正好对应了,pinia中的状态存储,

这里分享一下关于响应式值在控制台的打印,开启这个设置就可以直接查看到响应式值中的内容,而不用去一级一级点开才能看到,

将state数据保存

export default function(context){
  console.log(context);
  const key = context.store.$id
  // 将数据保存在本地
  window.addEventListener('beforeunload', () => {// 页面关闭前执行
    localStorage.setItem(key, JSON.stringify(context.store.$state))
  })
}

使用store仓库的名称,也就$id的值作为key,将state里的值保存,这里监听了窗口的关闭事件,

当窗口关闭时,就会将store中的值保存下来

这里点击了4次按钮后,刷新页面,这个数据就存入了本地,

将state数据读取

export default function(context){
  console.log(context);
  const key = context.store.$id
  // 将数据保存在本地
  window.addEventListener('beforeunload', () => {// 页面关闭前执行
    localStorage.setItem(key, JSON.stringify(context.store.$state))
  })
  // 读取本地数据
  try{
    const data = JSON.parse(localStorage.getItem(key))
    if(data){
      context.store.$state = data
    }
  }catch(e){
    console.log("本地数据读取失败");
  }
}

因为这个插件是在main.js中启用的,所以它会在整个页面渲染前执行,这样就能将本地的数据读取并存入到store中,

这样就实现了一个持久化插件,

总结

全局插件的执行流程:在main.js中注册--->页面打开时执行(在页面维渲染时就已经执行了),

        一个插件其实就是实现某个功能的函数方法,并不是只有十分复杂的结构才能称为插件,当我们使用插件时,在理解了功能之后就可以尝试自己来实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【多通道卷积终结篇,通俗易懂,清晰必读】

作为常识, 1、卷积层 输出特征图通道数 卷积核个数 与输入特征图通道数无关, 2、多卷积核处理多通道特征图的机制过程如下: 本文的参考资料为知乎:一文读懂Faster RCNN。 对于多通道图像多卷积核做卷积,计算方式如…

Java 编程语言:过去、现在与未来

引言 自 1995 年由 Sun Microsystems 发布以来,Java 编程语言已经走过了漫长的道路。作为一种面向对象的编程语言,Java 因其“一次编写,到处运行”的理念而广受欢迎。本文将探讨 Java 的历史、主要特点、应用领域以及未来的发展趋势。 Java…

使用 Mac 数据恢复从 iPhoto 图库中恢复照片

我们每个人都会遇到这种情况:在意识到我们不想丢失照片之前,我们会永久删除 iPhoto 图库中的一些照片。永久删除这些照片后,是否可以从 iPhoto 图库中恢复照片?本文将指导您使用免费的 Mac 数据恢复软件从 iPhoto 中恢复照片。 i…

【漏洞复现】锐捷统一上网行为管理与审计系统——远程命令执行漏洞

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 锐捷统一上网行为管理与审计系统naborTable/static_convert.php…

AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?

随着科技的日新月异,AIGC(人工智能生成内容)和ChatGPT等AI技术的涌现,为互联网公司的创意设计师们描绘了一幅充满挑战与机遇的新图景。在这个数字化、智能化的新时代,创意设计师们不仅要保持敏锐的审美眼光和源源不断的…

梅雨季,祛湿不健脾,湿气易反复!4个方法助您健脾胃,祛湿气!

进入梅雨季以来,苏州连续降雨,空气湿度增加,我们身体内的湿气也愈加严重:身上胖嘟嘟、脸上油乎乎、身体困重、乏力,极易疲劳,食欲减退,头昏昏沉沉的,大便也十分黏腻…… 关于祛湿&am…

东昂科技从创业板改道北交所:大客户依赖症明显,巨额分红又募投补流

《港湾商业观察》施子夫 黄懿 2024年6月24日,厦门东昂科技股份有限公司(以下简称,东昂科技)在北交所网站披露第二轮审核问询函的回复。自2024年1月IPO申请获北交所受理以来,东昂科技已经收到北交所下发的两轮审核问询…

使用官方新工具手动升级 Quest 操作系统

Meta 近期推出了一款用于手动升级 Meta Quest 系统的工具,为用户提供了更多选择。本文将详细介绍如何使用这一工具进行系统升级。 优势与劣势 优势: 安装迅速:升级速度相比在线自动升级快,且可实时查看进度 即时升级&#xff1…

筛斗数据:数据提取技术,让信息海洋变得有序

在数字化时代,信息如同浩渺的海洋,源源不断地涌入我们的生活和工作。然而,这个信息海洋的浩瀚与繁杂也给我们带来了挑战:如何在海量的数据中快速找到有价值的信息?数据提取技术,作为一种强大的工具&#xf…

权威VS实战:如何权衡六西格玛培训证书的两种价值?

当我们谈论六西格玛培训证书时,我们不得不提到两种截然不同的“身份象征”。一种是由专业培训机构颁发的证书,这种证书在质量管理领域同样具有不可忽视的价值。 培训机构颁发的六西格玛证书,不仅代表着你已经完成了他们精心设计的培训课程&a…

【启明智显分享】低成本RISC-V工业级HMI方案推荐

伴随着工业4.0的迅猛发展,工业HMI以方便、快捷的特点逐渐成为工业的日常应用,成为备受追捧的全新多媒体交互设备。 什么是工业HMI?工业HMI是用于工业自动化系统中的人机交互界面,通常由触摸屏、按钮、指示灯、显示器等组成&#…

集成openfeign

集成feign有两种方式. 1.集成到所需项目中(只有该项目可以用)直接引用所需调用的项目 2.集成到公共项目(通用) 1.集成到所需项目中(只有该项目可以用) 再需要消费的服务 进行依赖的引用 1.引入依赖,openfeign,和所需调用的服务 <!--feign--><dependency><gro…

谐波减速器行业发展速度有望加快 工业机器人领域为其最大需求端

谐波减速器行业发展速度有望加快 工业机器人领域为其最大需求端 谐波减速器指通过增大转矩、降低转速等方式实现减速目的的精密传动装置。谐波减速器具有轻量化、体积小、承载能力大、精度高、可靠性高、运行噪音小等优势&#xff0c;广泛应用于工业机器人、半导体制造、精密医…

常见漏洞类型汇总

一、SQL注入漏洞 SQL注入攻击&#xff08;SQL Injection&#xff09;&#xff0c;简称注入攻击、SQL注入&#xff0c;被广泛用于非法获取网站控制权&#xff0c;是发生在应用程序的数据库层上的安全漏洞。在设计程序&#xff0c;忽略了对输入字符串中夹带的SQL指令的检查&#…

Open WebUI升级到最新版本

背景介绍 open-webui是一个用于构建Web用户界面的开源库&#xff0c;它仿照 ChatGPT 的图形化界面&#xff0c;可以非常方便的调试、调用本地大语言模型。 目前该开源库更新较为活跃&#xff0c;从3个月前的版本&#xff08;v0.1.108&#xff09;到截止到2024年6月中旬发布的…

链在一起联机存档同步教程 教你如何学会链在一起联机同存档

双人成行&#xff0c;四人更行了&#xff0c;说的就是新游戏链在一起&#xff0c;多人合作冒险游戏&#xff0c;一个是和兄弟四人一起玩的游戏&#xff0c;游戏中四个人被铁链绑在一起&#xff0c;大型节目之好兄弟到底谁是脑瘫正在上演&#xff0c;甚至有些玩家感觉链子牵的不…

【传拓研学】传承文化瑰宝,领略千年韵味

非遗薪火&#xff0c;传承中华文明 文化繁荣&#xff0c;共筑美好未来 在这风云变幻的时代&#xff0c;我们始终怀揣着对历史与文化的敬仰之情。今日&#xff0c;我们隆重向您推荐一项极具意义的活动——传拓研学活动。 传拓是我国一项古老的传统技艺&#xff0c;非遗物质文…

【大数据】什么是数据集成?(附FineDataLink集成工具介绍)

踏入大数据时代&#xff0c;信息洪流以前所未有的规模冲击着现代企业。数据&#xff0c;从边缘走到核心&#xff0c;成为驱动发展的关键力量。在此背景下&#xff0c;数据整合与价值挖掘能力跃升为企业竞争力的标尺。聚焦数据来源多样性和格式复杂性&#xff0c;探索先进分析工…

<电力行业> - 《第2课:电力行业的一会两网》

1 一会 一会指的是电监会&#xff0c;全称是国家电力监管委员会。根据国务院批准《国家电力监管委员会职能配置内设机构和人员编制规定》&#xff0c;国家电力监管委员会按照国务院授权&#xff0c;行使行政执法职能&#xff0c;依照法律、法规统一履行全国电力监管职责。 2 …

ubuntu卸载python3,重装python2.7

卸载py3 Linux&#xff08;Ubuntu&#xff09;环境下安装卸载Python3&#xff08;避免踩坑&#xff09;_ubuntu卸载python-CSDN博客https://blog.csdn.net/BLee_0123/article/details/136075374 安装py2.7 Ubuntu上重装Python2&#xff08;强烈建议在不删除数据情况下&#…