pinia的使用vue3

1.安装pinia

pinia持久化工具pinia-plugin-persist

npm install pinia pinia-plugin-persist -D -S

2.使用pinia

main.js

import store from "/@/store";
app.use(store);

在这里插入图片描述
index.js

import { createPinia } from "pinia";
import piniaPluginPersist from "pinia-plugin-persist";
const store = createPinia();
store.use(piniaPluginPersist);
export default store;

userStore.js
可以创建多个此文件

import { defineStore } from "pinia";
export const userStore = defineStore({
  id: "user",
  state: () => {
    return {
      name: ""
    };
  },
  //类似于computed 可以帮我们去修饰我们的值,相当于过滤器
  //函数接受一个可选参数 state
  getters: {
    formatNum() {
      return num => {
         return num++;
      };
    }
  },
  actions: {
    changeState(objData, arr) {
      arr.map(item => {
        this[item] = objData[item];
      });
    }
  },
  persist: {
    enabled: true, // true 表示开启持久化保存
    strategies: [
      {
        key: "actId", //设置缓存名称
        storage: sessionStorage, //设置缓存方式
        paths: ["name"] //设置需要缓存的对象
      }
    ]
  }
});

页面上

<template>
   <div>
    <span>姓名:{{ store.name }}---{{name}}</span>
    <br />
    <span>num:{{ store.formatNum(10) }}---{{formatNum(10)}}</span>
  </div>
  <el-button @click="handleClick">点击</el-button> 
</template>

<script setup>
import { userStore } from "/@/store/userStore"; //引入store文件
const store = userStore(); //声明赋值引入的store文件
import { storeToRefs } from "pinia"; //引入storeToRefs
const { name, formatNum } = storeToRefs(store); //数据解构出来
//使用storeToRefs函数将state里的数据解构出来实现响应式

修改store方法一:
可以同时修改多个数据
 store .$patch(state => {
 	state.name="小可爱";
 	......
});

修改store方法二:
store.name = "小可爱";

修改store方法三:
调用方法:
//逻辑比较多用action(可以同步也可以异步)
const handleClick = () => {
  let num = store.formatNum(10); 
  store.$patch(state => {
    state.name="小可爱";
    ......
  });
};
</script>
3.常见API

$reset():重置store到它的初始状态

const resetFn=()=>{
  store.$reset()
}

$subscribe:订阅state的改变,只要有state 的变化就会走这个函数

store.$subscribe((args,state)=>{
   console.log(args,state);
})

$onAction:订阅Actions的改变,只要有actions被调用就会走这个函数

store.$onAction((args)=>{
   console.log(args);
})
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的内容是关于在Vue2中使用Pinia的安装步骤和引入方式。首先,需要安装Pinia和@vue/composition-api依赖。使用以下命令进行安装: ```cnpm i pinia --save cnpm i pinia @vue/composition-api --save ``` 然后,在main.js文件中引入PiniaPiniaVuePlugin,并创建Pinia实例,将其挂载在Vue实例上,示例如下: ```javascript // 引入pinia import { createPinia, PiniaVuePlugin } from 'pinia' Vue.use(PiniaVuePlugin) const pinia = createPinia() new Vue({ router, pinia, render: h => h(App) }).$mount('#app') ``` 引用中的内容是关于在Vue2中使用Pinia的模板使用方式。可以直接在template中使用Pinia提供的状态和方法。示例如下: ```vue <template> <div> <fieldset> <legend>{{ this.obj.comp }} <button @click="this.obj.increment">{{ this.obj.counter }}</button> </legend> </fieldset> </div> </template> <script> // 导入 pinia 实例 import useMainStore from '../storeioen' // 实例化容器 const mainStore = useMainStore() export default { data() { return { id: '' } }, mounted() { this.obj = mainStore console.log(this.obj) } }; </script> ``` 引用中的内容是关于在Vue2中使用Pinia的storeToRefs方法。storeToRefs方法可以将Pinia的状态转换为响应式的ref,并将其导出供模板使用。示例如下: ```vue <script> import { mapState, mapActions, storeToRefs } from 'pinia' import storeId from '../storeioen' //storeId就是导出的那个值 const ustoreId = storeId() //实例化容器 console.log(ustoreId) const { counter } = storeToRefs(ustoreId) //这样使用 export default { data() { return { id: '' } }, methods: {}, computed: {}, mounted() { this.id = counter // 但是这样出来的值会变成一个对象,值的键为值,使用时需要注意 } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值