vue3+ts+vite实现pinia

news2024/11/15 17:40:27

本篇文章主要从事3部分

  1. 单个store下的文件进行使用
  2. 模块下进行使用(pinia不像vuex那样使用模块化了 直接在store下定义ts文件即可)
  3. pinia持久化使用

安装pinia : cnpm install pinia
安装持久化 cnpm install pinia-plugin-persistedstate

1.单文件: index.ts (先不要管user.ts)
在这里插入图片描述

index.ts

import { defineStore } from "pinia"; 
//定义接口限制state的类型
interface State {
  indexCount: number;
}
//const index = defineStore('index'{
//或者  id:'index'//  两种方式  这个name是store的唯一表示(自己定义名字)
const index = defineStore({
  id: "index", 
  state: (): State => {
    return {
      indexCount: 10,
    };
  },
  getters: {
    // double: (state): number => state.indexCount * 2,
    double(): number {
      return this.indexCount * 2;
    },
  },
  actions: {
    increment() {
      this.indexCount++;
      return this.indexCount;
    },
  },
});
 
  export default index;
 

vue文件进行使用

<template>
  <div></div>
</template>

<script setup lang="ts">
// 引入store导出的
  import indexStore from "@/store";
  //这个就是把解构store的数据进行响应式 不然修改的时候源数据不会进行实时的更新
  import { storeToRefs } from "pinia";
  const indedex = indexStore(); 
  //对象解构
 const { indexCount, double } = storeToRefs(indedex);
 console.log(indexCount.value, "主入口解构的state");
 console.log(double.value, "主入口解构的getters");
</script>

<style scoped></style>

在这里插入图片描述
2.模块下进行使用

user.ts

import { defineStore } from "pinia";
export interface UserState {
  username: string;
}
const user = defineStore({
  id: "user",
  state(): UserState {
    return {
      username: "zhuzhu",
    };
  },
  getters: {},
  actions: {},
});
export default user;

在index.js引入

import { defineStore } from "pinia";
//引入user
import user from "./user"; 
interface State {
  indexCount: number;
}
const index = defineStore({
  id: "index", //  两种方式
  state: (): State => {
    return {
      indexCount: 10,
    };
  },
  getters: {
    // double: (state): number => state.indexCount * 2,
    double(): number {
      return this.indexCount * 2;
    },
  },
  actions: {
    increment() {
      this.indexCount++;
      return this.indexCount;
    },
    //修改state的属性
    revise(value:number){
     this.indexCount=value
    }
  },
});
 
// 导出 多文件
  export { index, user };

组件文件使用

<template>
  <div></div>
  <button @click='reviseIndexCount'>修改index模块下的indexCount</button>
</template>

<script setup lang="ts">
// 模块
  import { index, user } from "@/store";
  import { storeToRefs } from "pinia";
  //解构出来state和getters
  const { indexCount, double } = storeToRefs(index()); 
   const { username } = storeToRefs(user());
  //解构action方法
  const { increment ,revise} = index();


  console.log(indexCount.value, "indexCount");
    console.log(double.value, "double");
  console.log(username.value, "username");

  //直接调用action的方法即可
  console.log(increment(), "increment");
  const reviseIndexCount=()=>{
   revise(20)
  }
</script>

<style scoped></style>

运行结果(我没运行修改的方法)

在这里插入图片描述
main.js引入

import { createApp } from "vue";
import { createPinia } from "pinia"; 
import "./style.css";
import App from "./App.vue";
const  pinia=createPinia();
createApp(App).use(pinia).mount("#app");

3.pinia数据持久化

import { defineStore } from "pinia";
import user from "./user";
import type { UserState } from "./user";
interface State {
  indexCount: number;
}
const index = defineStore({
  id: "index", //  两种方式
  state: (): State => {
    return {
      indexCount: 10,
    };
  },
  getters: {
    // double: (state): number => state.indexCount * 2,
    double(): number {
      return this.indexCount * 2;
    },
  },
  actions: {
    increment() {
      this.indexCount++;
      return this.indexCount;
    },
    //修改state的属性
    revise(value:number){
     this.indexCount=value
    }
  },
   // 所有数据持久化 存在localstore
    // persist: true,
  persist: {
    // 修改存储中使用的键名称,默认为当前 Store的 id
    key: "storekey", // 修改为 sessionStorage,默认为 localStorage
    storage: window.sessionStorage, 
    // 部分持久化状态的点符号路径数组,[]意味着没有状态被持久化(默认为undefined,持久化整个状态)
    paths: ["indexCount"],
  },
});
/ 
// 导出 多文件
export { index, user };

main.js引入pinia持久化

import { createApp } from "vue";
import { createPinia } from "pinia"; 
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

import "./style.css";
import App from "./App.vue";
const  pinia=createPinia();
pinia.use(piniaPluginPersistedstate)
createApp(App).use(pinia).mount("#app");

![在这里插入图片描述](https://img-blog.csdnimg.cn/8d350374c59f4c328819a7b26da746bc.png)

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

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

相关文章

详细讲解!如何模拟后台API调用场景

目录 简介 Postman 迁移至 ApiFox ApiFox 导入 Postman ApiFox 展示 API 调用场景 增加断言验证 API 使用测试执行场景 API 序列 总结 简介 在进行Web性能测试时&#xff0c;我们不仅需要测试前端页面的性能&#xff0c;还需要测试与后台API的交互性能&#xff0c;以及…

Spring Cloud常用组件介绍(Netflix、Alibaba)

Spring Cloud常用组件介绍 文章目录 **Spring Cloud常用组件介绍**一、说明**1.1.什么是Spring Cloud**1.2.Spring Cloud的组件选型 **二、组件介绍****2.1.服务注册与发现****2.1.1.Netflix Eureka****1&#xff09;分布式模型****2&#xff09;主要组件****3&#xff09;工作…

骑行陡坡村,潇潇洒洒出品

2023年6月10日群峰环抱小村庄盘山陡坡蜜桃香唇干舌燥咬一口甘甜香沁嘴边淌久旱叶枯悯农急乌云密布盼雷响但得雷神甘露下雨中狂奔又何妨

高效搞定文件重命名和归类!使用文件批量改名高手轻松实现

文件夹管理是计算机使用中非常重要的一项任务&#xff0c;对于个人电脑用户或企业机构来说&#xff0c;都需要对文件夹进行有效管理归类和重命名。 第一步&#xff0c;打开文件批量改名高手&#xff0c;进入文件批量重命名板块并点击添加文件&#xff0c;选择需要重命名的文件…

IOS应用跳转URL scheme和Universal Links

简介 IOS常见的跳转方式有URL scheme和Universal Links。这两个均可以实现App之间的跳转&#xff0c;以及通过网页实现跳转到对应的App内。通过本文章可以了解到两者的区别和具体的使用方法&#xff0c;以及参数的传递。应对常见的几种跳转需求。 URL scheme:需要配置URL sch…

增值税高不再是难事,只需一招即可解决!

《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税&#xff01; 任何一家企业&#xff0c;都逃脱不了一种税费的缴纳&#xff0c;那就是增值税。但其实小规模纳税人增值税缴纳&#xff0c;是可以享受到一些税收优惠照顾的&#xff0c;未达到月…

看完阿里大牛的LeetCode算法刷题手册后,成功在四面字节斩获offer

最近有看到很多朋友想进大厂&#xff0c;四面竟然都考了算法&#xff0c;很多同学面对算法的问题都很头大&#xff0c;因为自己做项目很难用到&#xff0c;但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典&#xff0c;这份刷题宝典&#xff0c;也让我进了心仪的大厂…

MyBatis Plus 解决大数据量查询慢问题

常规查询 流式查询 游标查询 大数据量操作的场景大致如下&#xff1a; 数据迁移 数据导出 批量处理数据 在实际工作中当指定查询数据过大时&#xff0c;我们一般使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或分很大一页查询数…

实用工具指南:2个提升效率的互联网利器

工具一&#xff1a; 字体酷站是全球最大的字体网址导航网站&#xff0c;收录了大量优质的字体素材和字体设计资源。该网站拥有丰富多样的字体分类和标签&#xff0c;用户可以根据需求选择不同类型、不同风格的字体&#xff0c;如商务字体、手写字体、卡通字体等。同时&#xf…

B+树单表超过2500万行的性能影响

&#xff08;有许多人是用青春的幸福作成功的代价的。——莫扎特&#xff09; B树 关于B树的原理请查看这篇文章 分析 MySQL采用了索引组织表的形式组织数据&#xff0c;叶子节点存储数据&#xff0c;非叶子节点存储主键与页面号的映射关系。若用户的主键长度是8字节时&…

基于MATLAB涡度通量数据处理

查看原文>>>基于MATLAB涡度通量数据处理实践技术应用 【内容简述】&#xff1a; 基于MATLAB语言、以实践案例为主&#xff0c;提供代码、原理与操作结合1、以涡度通量塔的高频观测数据为例&#xff1a;基于MATLAB上机操作2、涡度通量观测基本概况&#xff1a;观测技术…

用友 畅捷通T+ DownloadProxy.aspx 任意文件读取漏洞

1. 漏洞描述 用友 畅捷通T DownloadProxy.aspx文件存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取服务器上的敏感文件. 2.FOFA app"畅捷通-TPlus" 3.漏洞复现 登录页面 验证POC /tplus/SM/DTS/DownloadProxy.aspx?preload1&Path../../Web.Confi…

2.3 逻辑代数的基本公式和常用公式

博主介绍&#xff1a;一个爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;程序猿之数字电路 学习目标&#xff1a; 1. 学习基本概念&#xff1a;首先&#xff0c;了解逻辑代数的基本概念和术语&#xff0c;如命题、逻辑运算符&#xff08;与…

探索上位机编程的挑战与乐趣

上位机编程的难度取决于多个因素&#xff0c;包括您的编程经验、所使用的编程语言和开发工具、应用程序的复杂程度等等。 如果您具备一定的编程经验并且熟悉所选的编程语言和开发工具&#xff0c;那么上位机编程可能相对容易上手。上位机编程通常涉及与外部设备&#xff08;如…

Unity入门1——窗口布局

文章目录 一、Hierarchy 窗口 二、Scene 窗口 三、工具栏 四、Game 窗口 五、Project 工程窗口 六、Inspector 窗口 七、Console 窗口 一、Hierarchy 窗口 ​ 在这里创建对象、操作对象。 ​ 快捷键&#xff1a;F2&#xff1a;对象改名 ​ CtrlC&#xff1a;复制 ​ CtrlV&…

avue curd 中的配置项插槽使用

效果图&#xff1a;&#xff08;新增时候的步骤条&#xff0c;以为是设置透明度是0-1中的小数 avue中步骤是整数 于是使用到插槽用element-ui&#xff09; html&#xff1a; <template slot"opacityForm"><el-row class"row"><el-slider v-…

ABAP:后台执行JOB报错问题

错误&#xff1a;CL_GUI_CUSTOM_CONTAINERCP生成容器错误&#xff0c;主要在OOALV中运用到 原因&#xff1a;是由于我们在JOB后台执行的时候无法打开GUI端而报错的 此时&#xff0c;我们就需要在程序中去规避后台执行这一段逻辑&#xff0c;可以通过SY-BATCH解决&#xff0c;当…

今天终于知道了,阿里巴巴 P8、P9 及以上到底是什么水平?

做人做事不能万事向钱看&#xff0c;但是钱这个东西很多时候都反映了事物的价值以及一个人的能力水平。 比如阿里P8、P9 这些拿着高薪的程序员他们的技术水平就一直是大家好奇的。 今天在逛某乎的时候就恰好看见了一个几百万人关注的问题&#xff1a; 阿里的高p们动辄百万以上…

探索地理空间的无限可能:GIS地图的应用与发展

随着科技的飞速发展和数字化时代的来临&#xff0c;GIS地图正成为一个强大的工具&#xff0c;为我们提供了更准确、全面的地理空间数据和智能化的解决方案。GIS地图集成了地理信息、空间分析和可视化技术&#xff0c;为我们打开了一个全新的世界&#xff0c;让我们能够更好地理…

linux进阶 --- chrony服务器

chrony服务器 &#xff08;1&#xff09;定义&#xff1a; 是一个开源自由的网络时间协议NTP的客户端与服务器端软件。让计算机保持系统时钟与时钟服务器&#xff08;NTP&#xff09;同步。chrony由两个程序组成&#xff0c;chronyd&#xff08;服务器端&#xff09;和chronyc…