vue3 - pinia的基本用法

本文介绍了Pinia在Vue中的应用,包括如何安装、创建store、使用实例以及如何构建用户仓库并实现数据的持久化。详细讲解了defineStore、ref和computed的用法,以及storeToRefs在解构store时的作用。
摘要由CSDN通过智能技术生成

1.pinia的介绍

2.安装并创建pinia

3.使用pinia的实例

4.Pinia 构建用户仓库 和持久化

目录

1.pinia的介绍

2.安装并创建pinia

3.使用pinia的实例


1.pinia的介绍

        pinia简单来说就是vue的状态管理库(允许跨组件)

2.
        安装pinia
yarn add pinia
# 或者使用 npm
npm install pinia
若你下载了pnpm包管理器(使用这个包管理器比较快),则为
pnpm install pinia
        创建pinia

        

这些事做完了就可以创建并使用了。

3.pinia的使用

        Store 是用 defineStore() 定义的,它的第一个参数会被作为id,必须得传

import { defineStore } from "pinia";
import { ref } from "vue";
import { computed } from "vue";
// defineStore(仓库的唯一标识,()=>{....})
export const useTheStore = defineStore("counter",()=>{
    //声明数据
    const count = ref(100)
    const msg = ref("hi pinia")
    //声明操作数据的方法 action(普通函数)
    const addCount = ()=>{
        count.value+=10
    }
    const subCount = ()=>{
        count.value-=10
    }
    //声明基于数据派生的计算属性 getter (computed)
    const double = computed(()=>{return count.value*2})
    return{
        addCount,
        subCount,
        double,
        count,
        msg,
    }
})

你定义的数据和方法写完后记得return出去,不然外面的拿不到。

<script setup lang="ts">
import { useTheStore } from '../store/pinia'

const storeCount = useTheStore()

</script>

<template>
<div>
    <p>pinia - {{ storeCount.count }} - {{ storeCount.msg }} - {{ storeCount.double }}</p>
    <button @click="storeCount.subCount">-</button>
    <button @click="storeCount.addCount">+</button>
   
</div>

</template>

<style scoped>

</style>

如果你嫌写storeCount.addCount太麻烦,就可以通过使用storeToRefs进行解构(若不适用storeToRefs,数据将丢失响应式),方法不需要使用storeToRefs便可直接解构

<script setup lang="ts">
import { useTheStore } from '../store/pinia'
//对于pinia中拿来数据若直接解构,不处理,数据就会丢失响应式
//此时需使用storeToStore
import { storeToRefs } from 'pinia'
const storeCount = useTheStore()
const {count} = storeToRefs(storeCount)
//对于pinia的方法则可直接解构
const {addCount} = storeCount
//pinia 的持久化 ----个人感觉和js的localStorage差不多
</script>

<template>
<div>
    <p>pinia - {{ storeCount.count }} - {{ storeCount.msg }} - {{ storeCount.double }}</p>
    <button @click="storeCount.subCount">-</button>
    <button @click="storeCount.addCount">+</button>
    <p>我是pinia中的 - {{ count }}</p>
    <button @click="addCount">(我是pinia中的button) + </button>

</div>

</template>

<style scoped>

</style>
4.Pinia 构建用户仓库 和 持久化(刷新之后数据仍在)

        安装依赖:

pnpm add pinia-plugin-persistedstate -D

         将插件添加到实例上:

import { createApp } from 'vue'
import { createPinia } from "pinia"
import persist from 'pinia-plugin-persistedstate'
import App from './App.vue'
const app = createApp(App)
app.use(createPinia().use(persist))
app.mount("#app")

         用法:

export const userStore = defineStore("myname",()=>{
    const token = ref("")
    const setToken = (newToken:any) => {
        token.value = newToken
    }
    const removeToken = () =>{
        token.value = ""
    } 
    return {
        token,
        setToken,
        removeToken
    }
},{
    persist:true // 为true时整个 Store 将使用默认持久化配置保存,其也可为对象(自己设置配置)
})

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值