vue3.2的vuex升级pinia

 Pinia是什么?

Pinia 2019 年由 vue.js 官方成员重新设计的新一代状态管理器 , 更替 Vuex4 成为 Vuex5; 是最新一代的
轻量级状态管理插件。按照尤雨溪的说法, vuex 将不再接受新的功能,建议将 Pinia 用于新的项目。
Pinia 的优点
简便,存储和组件变得很类似,你可以轻松写出优雅的存储。
类型安全,通过类型推断,可以提供自动完成的功能。
vue devtools 支持,可以方便进行调试。
Pinia 支持扩展,可以非常方便地通过本地存储,事物等进行扩展。
模块化设计,通过构建多个存储模块,可以让程序自动拆分它们。
非常轻巧,只有大约 1kb 的大小。
服务器端渲染支持。
如何使用
使用 Pinia 非常简单,你可以通过 defineStore 来简单创建一个存储管理。
​​​​​​​yarn add pinia -s

yarn config set ignore-engines true
导入 pinia
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import {createPinia} from 'pinia'  
const pinia = createPinia();//实例化pinia
createApp(App).use(router).use(pinia).mount('#app')
状态定义
可以通过 defineStore 来简单创建一个存储管理 ;
第一个参数 :相当于为容器起一个名字。注意:这里的 名字必须唯一,不能重复
第二个参数 :可以简单理解为一个配置对象,对容器仓库的配置说明
import { defineStore } from 'pinia'
export const mainStore = defineStore('main',{
   state(){
       return {
           title:'itlove',
           count:1,
       }
   },
   getters:{
       changeCount(){
           return this.count+10
       }
   },
   actions:{
       addCount(){
   }
   }
})
引用状态数据
<template>
   <div>
       <p>{{store.title}}</p>
   </div>
</template>
<script setup>
import {ref,reactive} from 'vue'
import {mainStore} from '@/store/index' //导入状态仓库
const store = mainStore(); //实例化仓库
</script>

或者

<template>
   <div>
       <p>{{title}}</p>
   </div>
</template>
<script setup>
import {ref,reactive} from 'vue'
import {mainStore} from '@/store/index' //导入状态仓库
const {title} = mainStore(); //实例化仓库
</script>
修改状态数据
<template>
   <div>
       <p>{{store.title}}</p>
       <p>数据:{{store.count}}</p>
       <button @click="handleClick">修改状态数据</button>
   </div>
</template>
<script setup>
import {ref,reactive} from 'vue'
import {mainStore} from '@/store/index' //导入状态仓库
import { storeToRefs } from "pinia";
const store = mainStore(); //实例化仓库
// 解构并使数据具有响应式
 const {count} = storeToRefs(store);
function handleClick() {
   count.value++;
}
</script>
state 状态值修改的多种方式
使用 $patch 改变数据 ,$patch 可以同时修改多个值
方式一:通过 count.value+1;
方式二:仓库实例的 $patch 方法
  store.$patch({
    count: count.value+1,
  });
  $patch 也可以传入一个函数,函数参数为 state 状态
  store.$patch((state) => {
    state.title = "hello 艾梯哎教育 !";
    state.count++;
  });
方式三:通过 action()
store.addCount()
pinia actions 的使用
pinia 中没有 mutations, 只有 actions, 不管是同步还是异步的代码 , 都可以在 actions 中完成
actions:{
   //actions 异步请求
   async login(user, password) {
       const userData = await apiLogin(user, password);
      
       this.$patch({
           name: user,
           ...userData,
       })
 }
}
pinia 数据持久化
通过 Pinia 插件快速实现持久化存储
插件安装:
命令: npm i pinia-plugin-persist -S

 

使用插件
import {createPinia} from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist'
const pinia = createPinia();  
pinia.use(piniaPluginPersist); 
createApp(App).use(router).use(pinia).mount('#app')
模块开启持久化
persist: {
       enabled: true, //开启
       strategies:[
           {
               key: 'store',
               storage: sessionStorage, 
               paths:['count']
           }
       ]
   }

以下为实战

 

 应用

 

后续高级 提升

pinia 数据持久化
通过 Pinia 插件快速实现持久化存储
插件安装:
命令: npm i pinia-plugin-persist -S

使用插件
import {createPinia} from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist'
const pinia = createPinia();  
pinia.use(piniaPluginPersist); 
createApp(App).use(router).use(pinia).mount('#app')
模块开启持久化
persist: {
       enabled: true, //开启
       strategies:[
           {
               key: 'store',
               storage: sessionStorage, 
               paths:['count']
           }
       ]
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云草桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值