Vue3 pinia的基本使用

pinia的使用跟vuex很像,去除了很多没用的api,写法有两种,一种老式的选项式api还有一种组合式api,用哪种根据自己喜好来,以下示例为组合式api

更多教程参考官网:pinia官网icon-default.png?t=N7T8https://pinia.vuejs.org/zh/

安装

npm install pinia

配置

import { createPinia } from 'pinia';
import persisted from "pinia-plugin-persistedstate";//持久化插件
import App from './App.vue'
const pinia = createPinia();
const app = createApp(App)
app.use(pinia.use(persisted));//使用pinia以及pinia持久化插件

新建store文件夹=>index.js

引入defineStore方法穿件一个store,主要接收三个参数

参数一:store的唯一key值

参数二:数据存储区以及方法,

参数三:持久化配置(将数据放缓存持久保存)

import {
    defineStore
} from "pinia"
import {
    ref
} from "vue"

// 首页属性
export const usehomeStore = defineStore('storeKey', () => {
    let menuState = ref(false)//菜单展开状态
    const testData = ref('测试');

    function changeMenuStateFn() {
        menuState.value = !menuState.value
    }
    return {
        menuState,
        testData,
        changeMenuStateFn,
    }
},
{
    persist:{
        enabled:true,//是否开启持久化,对象形式不写默认为开启
        key:'menuShowState',//存储时候的key值,默认为defineStore的key
        storage:"sessionStorage",//存储类型,默认localStorage
        paths:['menuState'],//需要持久化的数据,默认全部
        serializer:{
            deserialize:()=>{
                console.log('ooo');
            },
            serialize:()=>{
                console.log('ppp');
            },
        },//序列化方法,默认为JSON.parse与JSON.stringify
        beforeRestore: (ctx) => {
            console.log(`即将恢复 '${ctx.store.$id}'`)
        },
        afterRestore: (ctx) => {
            console.log(`刚刚恢复完 '${ctx.store.$id}'`)
        },
    }
}
)

页面使用:

使用的时候记得使用一下,因为向外暴露的是一个方法,所以需要调用一下才能获取到值,因为在store里面已经使用ref响应过了 所以无需用ref定义,直接在页面使用即是响应式数据,

注意:此处尽量不要解构,解构会丢失响应式,如果一定要解构请使用storeToRefs,

此方法需要从pinia中导入,

使用示例:示例来自官网

<script setup>
import { storeToRefs } from 'pinia'
const store = useCounterStore()
// `name` 和 `doubleCount` 是响应式的 ref
// 同时通过插件添加的属性也会被提取为 ref
// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性
const { name, doubleCount } = storeToRefs(store)
// 作为 action 的 increment 可以直接解构
const { increment } = store
</script>
import {usehomeStore,usePublic} from "@/store/index.js"
const homeStore = usehomeStore();
const publicStore = usePublic();
<el-aside class="aside" :width="homeStore.menuState?'60px':'200px'">

相关推荐

  1. Vue3】状态管理工具——pinia使用

    2023-12-05 20:26:09       43 阅读
  2. vue3+vite+js 使用pinia -- vue2 vuexplus版

    2023-12-05 20:26:09       13 阅读
  3. vue3使用pinia

    2023-12-05 20:26:09       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 20:26:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 20:26:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 20:26:09       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 20:26:09       20 阅读

热门阅读

  1. 如何判别使用的junit是4还是5

    2023-12-05 20:26:09       31 阅读
  2. 异常与junit

    2023-12-05 20:26:09       40 阅读
  3. CF 1901B Chip and Ribbon 学习笔记

    2023-12-05 20:26:09       44 阅读
  4. springcloud==ribbon

    2023-12-05 20:26:09       38 阅读
  5. 【光的波长和频率计算】

    2023-12-05 20:26:09       37 阅读
  6. prompt提示

    2023-12-05 20:26:09       34 阅读
  7. Linux C语言 32-网络编程之UDP例程

    2023-12-05 20:26:09       48 阅读
  8. STM32 基础知识

    2023-12-05 20:26:09       38 阅读