vue3 pinia 的使用

什么是pinia

        官网地址:介绍 | Pinia 中文文档

pinia和vuex的区别

             pinia              vuex
写法

选项式 组合式

选项式 组合式
模块化没有
ts支持不支持
体积
持久化插件pinia-plugin-persistedstatevuex-persist、vuex-along

pinia的使用

        安装        

yarn add pinia
# 或者使用 npm
npm install pinia

        配置  需要在main.ts文件中导入createPinia函数并将Pinia插件与Vue应用程序绑定

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';

const app = createApp(App);

const pinia = createPinia();
app.use(pinia);

app.mount('#app');

       选项式写法

        创建仓库

import { defineStore } from 'pinia'
import piniaPersistConfig from '@/store/config/piniaPersist'

//对defineStore返回值的命名规范 一般以use开头 以Store 结束
//state 存储数据  action定义方法 getters 计算属性
export const useTabsStore = defineStore({
  id: 'xxxxxx', //仓库的名字
  state: (): TabsState => ({
    tabsMenuList: [],
    counter: 1,
  }),
  actions: {
    addTabs() {},
  },
  getters: {
  	counterPar(){
  		return this.counter + 100;
  }
  //数据持久化 persist: true相当于persist: { storage: localStorage}
  persist: true
})

        使用仓库

import { useTabsStore } from '../../../store/modules/tabs'


// 注意:如果将store中的数据解构出来会失去响应式 需要使用storeRefs保持响应式


const tabStore = useTabsStore()

const tabsMenuList = computed(() => tabStore.tabsMenuList) //使用仓库的数据


tabStore.addTab()  //使用仓库的方法




<el-tab-pane v-for="item in tabsMenuList" :key="item.path"></el-tab-pane>




  组合式api写法 创建仓库

//创建用户相关的小仓库
import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useUserStore = defineStore(
  'User', //仓库的名字
  () => {
    //state
    const name = ref<string>('')
    
    //定义方法
    const userLogin = async (data: loginFormData) => {
     
    }

    
//最后记得要将数据return出去
    return {
      name,
      userLogin
    }
  },
   //数据持久化 persist: true相当于persist: { storage: localStorage}
  {
    persist: true,
  },
)

使用仓库 和 选项式写法的使用仓库一致

数据持久化  pinia-plugin-persistedstate

安装 

yarn add pinia-plugin-persistedstate
# 或者使用 npm
npm install pinia-plugin-persistedstate

配置 在store文件中创建config-->piniaPersist.ts

import { PersistedStateOptions } from 'pinia-plugin-persistedstate'

/**
 * @description pinia 持久化参数配置
 * @param {String} key 存储到持久化的 name
 * @param {Array} paths 需要持久化的 state name
 * @return persist
 * */
const piniaPersistConfig = (key: string, paths?: string[]) => {
  const persist: PersistedStateOptions = {
    key, //存入本地的key
    storage: window.localStorage, //存在哪
    // storage: sessionStorage, 
    paths, //state 中的字段名,按组打包储存
  }
  return persist
}

export default piniaPersistConfig

然后在main.ts中注册成插件

import piniaPersistConfig from '@/store/config/piniaPersist'

pinia.use(piniaPersistConfig)
app.use(pinia)

使用piniaPersistConfig(位置就写在 上面的 选项式和组合式创建仓库的代码中的数据持久化处)

{
    persist: piniaPersistConfig('doctor-users'),
  },

注意:持久化插件是自动存储和读取本地的数据  如果在需要清楚本地的数据,封装移除本地数据的方法即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值