vue3+ts+vite实现pinia

简介: vue3+ts+vite实现pinia

本篇文章主要从事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;
    },
  },
});
 
// 导出 多文件
  export { index, user };

组件文件使用

<template>
  <div></div>
</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 } = index();


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

  //直接调用action的方法即可
  console.log(increment(), "increment");
</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;
    },
  },
   // 所有数据持久化 存在localstore
    // persist: true,
  persist: {
    // 修改存储中使用的键名称,默认为当前 Store的 id
    key: "storekey", // 修改为 sessionStorage,默认为 localStorage
    storage: window.sessionStorage, 
    // 部分持久化状态的点符号路径数组,[]意味着没有状态被持久化(默认为undefined,持久化整个状态)
    paths: ["indexCount"],
  },
});
/ 
// 导出 多文件
export { index, user };

在这里插入图片描述

相关文章
|
19天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
16天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
38 7
|
18天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
39 3
|
16天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
36 1
|
16天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
38 1
|
19天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
19天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
7天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
7天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
7天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。