当前位置: 首页 > news >正文

【VUE3】Pinia

目录

0前言

1 手动添加Pinia

2 创建与使用仓库(Setup Store 组合式)

2.1 创建仓库

2.2 使用仓库数据

2.3 解构响应式数据

3 持久化插件


0前言

官网:Pinia | The intuitive store for Vue.js


1 手动添加Pinia

上手之后,可以通过create-vue脚手架勾选Pinia快速添加

第一步:安装Pinia

在没有Pinia的相目中,执行以下命令

npm i pinia

第二步:在main.js中添加pinia

此处为VUE3的操作,VUE2的操作请见官方文档:开始 | Pinia

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

const pinia = createPinia() // 创建Pinia实例
const app = createApp(App) // 创建根实例

app.use(pinia) // pinia插件的安装配置
app.mount('#app') // 视图的挂载

也可以用链式写法:

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

const pinia = createPinia()

createApp(App).use(pinia).mount('#app')

2 创建与使用仓库(Setup Store 组合式)

另一种方式(Option Store 选项式)见 定义 Store | Pinia 

2.1 创建仓库

你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
(比如 `useUserStore`,`useCartStore`,`useProductStore`)
第一个参数是你的应用中 Store 的唯一 ID

// store/count.js
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'


export const usecountStore = defineStore('count', () => {

  // ———————————————————声明数据 state—————————————————————

  const number1 = ref(1)


  // ———————————————————声明方法 actions—————————————————————

  const addNum = () => {
    // 同步
    number1.value++
  }

  const subNum = () => {
    // 异步 - 模拟异步,1s后操作
    setTimeout(() => {
      number1.value--
    }, 1000)
  }


  // ———————————————————声明计算属性—————————————————————

  const doubleNum = computed(() => number1.value * 2)
  
  // ———————————————————导出属性与方法—————————————————————

  return {
    number1,
    addNum,
    subNum,
    doubleNum
  }
})

2.2 使用仓库数据

<script setup>
// 导入仓库
import { usecountStore } from '@/store/count'
// 获取数据
const count = usecountStore()
</script>

<template>
  <div>
    number1: {{ count.number1 }}
  </div>
  <div>
    doubleNumber1: {{ count.doubleNum }}
  </div>
  <button @click="count.addNum">+1</button>
  <button @click="count.subNum">-1</button>
</template>

<style scoped>

</style>

2.3 解构响应式数据

直接解构仓库中的响应式数据时,会得到非响应式的数据,需要用pinia中的 storeToRefs() 方法

注意:actions不需要!因为我们并不会改方法

<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>

3 持久化插件

官网:Pinia Plugin Persistedstate

vue2持久化插件:GitHub - robinvdvleuten/vuex-persistedstate

第一步:安装插件 pinia-plugin-persistedstate

npm i pinia-plugin-persistedstate

第二步:在main.js中使用

import persist from 'pinia-plugin-persistedstate'
...
app.use(createPinia().use(persist))

第三步:在仓库中配置

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'

export const useCounterStore = defineStore('counter', () => {
  ...
  return {
    count,
    doubleCount,
    increment
  }
}, {
  persist: true    //只需要配置这里
})
http://www.dtcms.com/a/106758.html

相关文章:

  • ARM 性能分析工具:Streamline
  • 高并发内存池(二):Central Cache的实现
  • Java 进化之路:从 Java 8 到 Java 21 的重要新特性
  • 【爬虫基础】第三部分 爬虫请求库 1/4
  • Android 防抖和节流
  • 【Kafka基础】Kafka工作原理解析
  • 英语口语 -- 常用 1368 词汇
  • 206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表
  • 店铺状态设置-03.功能测试
  • Kotlin问题汇总
  • AI:机器学习-线性回归
  • 边缘计算赋能淘宝API:分布式节点缓存降低高并发延迟
  • 风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
  • 多模态RAG实践:如何高效对齐不同模态的Embedding空间?
  • arcgis10.8 Toolbox中的conversion tools没有to coverage工具?
  • 4. 理解Prompt Engineering:如何让模型听懂你的需求
  • 【Kafka基础】基础概念解析与消息队列对比
  • Redis如何在windows中简单安装?
  • 线性DP总结
  • Centos 8 安装教程(新手版)
  • element-ui自制树形穿梭框
  • python操作es
  • 机器学习的一百个概念(8)插补法
  • LeetCode hot 100—最长递增子序列
  • PyQt5界面设计
  • 现代几何风格网页标牌标识logo海报标题设计psai英文字体安装包 Myfonts – Gilroy Font Family
  • React安装使用教程
  • vue3源码分析 -- runtime
  • ES6中增强对象
  • 虚幻引擎控制角色跟随移动方向旋转的方法