vue3中数据的pinia的使用

一、安装pinia

npm i pinia

二、全局注册

import { createApp } from 'vue'

import { createPinia } from 'pinia'

import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

import './style.css'

import App from './App.vue'

const pinia = createPinia()

pinia.use(piniaPluginPersistedstate)

const app = createApp(App)

app.use(pinia)

app.mount('#app')

三、定义仓库

import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {

// 定义状态

state: () => ({

count: 0,

name: 'Eduardo',

field1: 'some data',

field2: 'other data'

}),

// 持久化配置

persist: {

key: 'counter-data',

storage: localStorage,

},

// 计算属性

getters: {

doubleCount: (state) => state.count * 2,

doubleCountPlus: (state) => state.count * 2 + 10

},

// 方法

actions: {

increment() {

this.count++

},

decrement() {

this.count--

},

incrementByAmount(amount) {

this.count += amount

},

// 添加一个重置方法用于测试

reset() {

this.count = 0

this.name = 'Eduardo'

this.field1 = 'some data'

this.field2 = 'other data'

}

},

})

四、使用

<template>

<div style="padding: 20px; border: 1px solid blue;">

<h2>计数器测试 (CounterTest)</h2>

<p>计数值: {{ counterStore.count }}</p>

<p>双倍计数: {{ counterStore.doubleCount }}</p>

<p>名称: {{ counterStore.name }}</p>

<div style="margin: 10px 0;">

<button @click="counterStore.increment()">+1</button>

<button @click="counterStore.decrement()">-1</button>

<button @click="counterStore.incrementByAmount(5)">+5</button>

<button @click="updateName">更新名称</button>

</div>

<div>

<input v-model="counterStore.count" type="number" placeholder="直接编辑计数" />

</div>

<div style="margin-top: 20px;">

<h3>本地存储检查</h3>

<p>localStorage中的值: {{ localStorageValue }}</p>

<p>Store的持久化配置: {{ persistConfig }}</p>

<button @click="refreshPage">刷新页面测试持久化</button>

</div>

</div>

</template>

<script setup>

import { useCounterStore } from '../stores/counter.js'

import { ref, onMounted, computed } from 'vue'

const counterStore = useCounterStore()

const localStorageValue = ref('')

const persistConfig = ref('')

const updateName = () => {

counterStore.name = `访客${Math.floor(Math.random() * 100)}`

}

const refreshPage = () => {

window.location.reload()

}

onMounted(() => {

// 读取localStorage中的值以检查是否正确保存

const storedValue = localStorage.getItem('counter-data')

localStorageValue.value = storedValue ? JSON.parse(storedValue).state : '未找到'

// 检查store的持久化配置

persistConfig.value = counterStore.$persist ? '已配置' : '未配置'

// 打印整个store状态

console.log('Store State:', counterStore.$state)

console.log('Persist Info:', counterStore.$persist)

})

</script>

相关推荐
崔庆才丨静觅1 分钟前
5分钟快速搭建 AI 平台并用它赚钱!
前端
数据知道11 分钟前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
崔庆才丨静觅28 分钟前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment31 分钟前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅1 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊1 小时前
jwt介绍
前端
爱敲代码的小鱼1 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte1 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
麦聪聊数据1 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务1 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考