首页 > 其他分享 >pinia的使用

pinia的使用

时间:2023-04-27 15:46:27浏览次数:29  
标签:userName vue state pinia 使用 import store

1. pinia和vuex的区别

  • pinia没有mutations,只有:state、 getters、 actions
  • pinia分模块不需要modules(之前vuex分模块需要modules)
  • pinia体积更小(性能更好)
  • pinia可以直接修改state数据

2.安装pinia

npm i pinia

根据需要 安装pinia-plugin-persist插件,实现持久化存储

npm i pinia-plugin-persist

3.main.ts中导入

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

import { createPinia } from 'pinia' // 从pinia中导入createPinia方法
import piniaPersist from 'pinia-plugin-persist'  //导入持久化存储

const app = createApp(App)

const pinia = createPinia()
pinia.use(piniaPersist)    //使用持久化存储,不需要可不写

app.use(pinia) // 使用vue实例的use方法,告诉vue我们要使用pinia
app.mount('#app')

4.创建store

新建store文件夹,新建userInfo.ts模块文件来存放用户信息相关的数据,因为pinia中没有modules区分模块,store下的每个文件就是一个模块

创建store很简单,调用pinia中的defineStore函数即可,该函数接收两个参数:

name:一个字符串,必传项,该store的唯一id。
options:一个对象,store的配置项,比如配置store内的数据,修改数据的方法等等。
我们可以定义任意数量的store,因为我们其实一个store就是一个函数,这也是pinia的好处之一,让我们的代码扁平化了,这和Vue3的实现思想是一样的。

import { defineStore } from 'pinia' //从pinia中导入,defineStore方法,用于定义一个新的store

// 第一个参数是应用程序中 store 的唯一 id,最好和文件名同意
export const userInfoStore = defineStore('userInfo', { // 使用defineStore方法定义store
  state:() => {                       // state表示这个store里的状态,也就是存放数据的地方
    return {
      userName: 'pinia定义的数据',       // 这里我们定义了一个数据叫userName,用于存放我们的用户名 
    }
  },
  getters: {
    double: (state) => '姓名:' + state.userName,
  },
  actions: {
    // 修稿state的值
    changeStateVal(val: any) {
      this.userName = val
    }
  },

  // 持久化存储配置
  persist: {
    enabled: true , // pinia-plugin-persist 是否开启持久化存储, 默认sessionStorage
    strategies: [{
      // key: 'userInfo',      //存储的key,默认当前store的key 
      // paths: ['userName'],   //哪个属性需要持久化存储,默认全是
      storage: localStorage    //使用localStorage存储
    }]
  }
})

5.使用store

引入使用即可,pinia中有多种方式可以修改state中的数据

<template>
  <div>
    {{ store.userName }}
    <button @click="handleUpdatePinia">修改pinia数据</button>
  </div>
</template>

<script setup lang="ts">
import { reactive, ref } from "vue";
import { storeToRefs } from "pinia";     //和vue中toRefs的作用一模一样
import { userInfoStore } from "../store/userInfo";  //直接引入store中定义的 userInfoStore
const store = userInfoStore();           // 然后实例化


const handleUpdatePinia = () => {
  // 第一种方式:直接修改
  // store.userName = 'dfads'    //直接修改pinia的数据

  // 第二种方式 通过$patch
  // 1.
  // store.$patch({
  //   userName: "被修改的值",
  // });

  // 2.
  // store.$patch((state) => {
  //   state.userName = "被修改的值";
  // });

  //第三种方式 通过actions里的方法修改
  store.changeStateVal("被修改的值"); //可以直接给actions里面的方法传递参数
};


</script>

标签:userName,vue,state,pinia,使用,import,store
From: https://www.cnblogs.com/shun1015/p/17359099.html

相关文章

  • 001使用HTTPS协议设置免密码提交代码
    一、store模式:将凭证用明文的形式存放在磁盘“home”目录下(默认是“~/.git-credentials”),永不过期,除非手动修改在Git服务器上的密码,否则永远不需要再次输入凭证信息。“git-credentials”文件内容如下:https://username:password@***********.com保存退出后,执行如下命令即可......
  • RPM常用命令以及组合使用场景
    本文分享自天翼云开发者社区《RPM常用命令以及组合使用场景》,作者:邬祥钊  当涉及到管理基于RedHat系的Linux系统时,RPM(RedHatPackageManager)是一个常用的软件包管理器。以下是一些常用的RPM命令以及它们的组合使用场景:常用命令:1.rpm-ivhpackage.rpm:安装......
  • 前端项目使用vw视口单位进行适配时字体大小的解决方案
    使用视口单位vw来实现响应式排版。1vw等同于视口宽度的百分之一,即如果你用vw来设定字体大小的话,字体的大小将总是随视口的大小进行改变。问题在于,当做上面的事情的时候,因为文本总是随着视口的大小改变大小,用户失去了放缩任何使用vw单位的文本的能力。所以你永远都不要只用viewpo......
  • Leangoo领歌瀑布软件研发项目管理使用场景
    ​下面这个场景是是阶段式软件研发场景,适用于采用瀑布模式开展软件研发的企业或者团队。创建项目在Leangoo中,新建项目时,使用“阶段式软件开发项目”项目模板创建项目。系统会自动创建10个阶段看板(一个阶段一个看板),1个缺陷看板、1个风险管理看板和1个变更管理看板。​编辑阶......
  • 小知识:使用oracle用户查看RAC集群资源状态
    正常情况按照标准配置的环境变量,只能grid用户查看RAC集群资源状态。crsctlstatres-t但是绝大部分操作其实都是oracle用户来操作,比如启停数据库,操作完成以后就需要检查下集群资源状态。看到好多DBA在现场操作时就是来回各种切换或开多个窗口。其实有两个简单的解决方法可以......
  • UNRAID6.11.1开心版下载及使用说明(集成中文插件)
    众所周知,所谓开心版就是已经解除限制功能,可正常开心使用。申明:此版本用于个人测试研究使用,如用于生产环境请购买官方正版,支持正版。部份资源转载于网络,请自行测试研究,下载测试后自行删除,如因软件版权及功能引起的任何问题自用户自行承担。该版本集成了常用插件,默认简体中文界面,......
  • Unity Profiler使用说明
    CPUUsageProfilermoduleCPU使用分析器模块的图表显示了在应用程序中花费的时间。它包含应用程序花费时间的所有重要领域的概述,比如渲染,它的脚本和动画[toc]。本文包括:-CPU使用图表-CPU使用模块详细信息窗格-Timeline视图-层次结构和原始层次结构视图-常见的样品-......
  • 直播平台搭建源码,使用EasyExcel实现导入导出功能
    直播平台搭建源码,使用EasyExcel实现导入导出功能使用,添加依赖 <dependencies> <!--https://mvnrepository.com/artifact/com.alibaba/easyexcel--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>......
  • pinia vue3 ts 切换到其他页面后再切回来数据不见了
    piniavue3ts切换到其他页面后再切回来数据不见了刷新有数据,但是切换到其他页面后再切回来数据不见了,我需要切回来后数据还有。因为我的数据是刷新的话就会watch监视数据有没有改变,但是切换其他页面不会触发我应该把得到的数据存储到store里面这样切换其他页面也不会消失......
  • publish over ssh插件的使用。
    配置1.先安装publishoverssh插件,然后重新启动jenkins。2.安装后,给服务器起一个别名、配置ip,用户名、端口号、密码。连接测试,提示:success就代表成功了。如果提示密钥无效,而自己配置的都没有问题,可以选择把安装了jenkins的服务器重新一下,或者用别的服务器安装jenkins在试一下......