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;
    },
    //修改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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是Vue.js的下一个主要版本,它引入了一些功能和改进,以提高性能和开发体验。而TypeScript(TS)是一种强类型的JavaScript扩展,它添加了静态类型检查等功能。Pinia是一个以Composition API为基础的状态管理库,它与Vue3紧密集成在一起。而Vite是一种快速的构建工具,特别适用于Vue3的开发和构建。 在具体实现登录功能时,可以按照以下步骤进行: 1. 首先,需要安装Vue3、TypeScript、Pinia和Vite。可以通过npm或yarn等包管理工具进行安装。 2. 创建一个新的Vue3项目,并设置使用TypeScript。 3. 在项目的入口文件中引入Vue、Pinia和创建Pinia实例。 4. 在Pinia实例中定义一个用于存储登录信息的状态。 5. 创建一个登录组件,在组件中定义一个表单,用于输入用户名和密码。 6. 在组件中引入定义好的Pinia实例,并使用`useStore`函数获取存储登录信息的状态。 7. 在组件的`methods`中,编写处理登录功能的方法,验证用户名和密码是否正确。 8. 在组件的模板中,使用v-model指令将输入框与组件内的数据绑定,并绑定登录按钮的点击事件。 9. 在App组件中引入登录组件,并将其渲染到页面上。 10. 运行项目,在浏览器中打开页面,即可看到登录表单。 11. 输入正确的用户名和密码,点击登录按钮,触发登录方法,根据验证结果显示相应的提示信息。 通过以上步骤,可以实现一个基本的登录功能。使用Vue3、TypeScript、Pinia和Vite可以让开发过程更加高效和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值