首页 > 其他分享 >[vue3]掌握pinia

[vue3]掌握pinia

时间:2024-06-17 10:02:46浏览次数:10  
标签:const 掌握 仓库 解构 num pinia vue3 import

pinia

Pinna是vue的最新状态管理工具, 用来替代vuex

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

优势

  1. 更简洁的API, 去掉了mutaion
  2. 与Vue3配套的组合式API风格
  3. 去掉了modules, 每个store都是独立的模块
  4. 更好的TS支持, 提供可靠的类型推断

安装

  1. 命令: npm i pinia
  2. main.js挂载

说明

pinia支持选项式和组合式2种写法, 选项式可以使用this, 组合式没有this

使用

1.0定义仓库
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

//创建语法
//defineStore('仓库的唯一标识',()=>{}, { persist: true })
//创建仓库返回一个函数, 函数执行会初始化仓库, 得到仓库就可以使用仓库的数据和方法
//命名规范: use+仓库名+Store
export const useCounterStore = defineStore('counter',()=>{
    // 1,定义的数据就是state
    const num = ref(10)
    // 2,定义的方法就是actions
    //   支持同步操作也支持异步操作
    const addNum = () => num.value ++
    const subNum = () => num.value --
    // 3,定义的计算属性就是getters
    const double = computed(()=>{
        return num.value * 2
    })

    return {
        num,
        addNum,
        subNum,
        double
    }
},{
    persist: true  // 开启持久化存储
})

2.0使用数据
<script setup>
import { useCounterStore } from '@/store/counter'
const countStore = useCounterStore()
</script>

<template>
    <p>
        我是son1--
        数据: {{ countStore.num }} --
        <button @click="countStore.subNum">-</button>
    </p>
</template>

3.0解构数据

页面直接访问数据不方便时, 可能会考虑解构数据, 但是直接解构仓库的数据, 会让数据失去响应式

  1. 原因: store是一个用reactive包装的对象, 直接解构相当于把propx代理对象的值取了出来, 独立的值必然失去响应式
  2. 解决: 如果希望解构出来的值是响应式的, 需要storeToRefs函数的帮助
  3. 最佳实践:
  • 数据解构的时候, 使用storeToRefs()处理一下
  • 方法结的时候直接解构, 方法不需要响应式
import { storeToRefs } from 'pinia'
const counter = useCounterStore()
// 直接解构数据会失去响应式
const {num} = counter()
// 解构数据不会失去响应式
const { num } =  storeToRefs(counter)

4.0持久化

vue3持久化插件 Home | pinia-plugin-persistedstate

vue2持久化插件 https://github.com/robinvdvleuten/vuex-persistedstate

步骤

  1. 安装插件 pnpm i pinia-plugin-persistedstate
  2. 使用插件
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
  1. 按需配置
  • defineStore('仓库的唯一标识',()=>{}, { persist: true })
  • 默认配置最简单, 对整个模块进行持久化
  • 默认基于localStorage储存数据
  • 默认以仓库的唯一标识作为存储的key名
  • 当然, 以上都是可改的, 可以参考官网配置, 很简单

标签:const,掌握,仓库,解构,num,pinia,vue3,import
From: https://blog.csdn.net/CSDN20221005/article/details/139731199

相关文章

  • 算法工程师 | 如何快速 了解,掌握一个算法!脚踏实地,迎着星辰,向前出发 ~
    本文是一些碎碎念希望对正在迈向算法工程师道路的你有所裨益一般来说,代码中会有很多算法实现的细节,但论文可能并没有体现,所以能够尝试自己仔细阅读论文,手动复现代码,基本上来说对这个算法你有了全面的理解,和把握。通过算法设计的一些特性,你会知道这个算......
  • [vue3]组件通信
    自定义属性父组件中给子组件绑定属性,传递数据给子组件,子组件通过props选项接收数据props传递的数据,在模版中可以直接使用{{message}},在逻辑中使用props.messagedefinePropsdefineProps是编译器宏函数,就是一个编译阶段的标识,实际编译器解析时,遇到后会进......
  • 全面的初级入门指南,从安装到基本使用,再到一些高级功能的介绍,帮助用户在实际操作中逐步
    大纲:WindowsNmap初级使用教程1.简介什么是Nmap?Nmap的主要功能和用途安全和法律注意事项2.安装Nmap前提条件从官方网站下载Nmap安装步骤验证安装3.基本使用打开命令提示符运行你的第一个Nmap扫描示例命令:nmap目标IP地址理解基本的输出结果4.常用扫......
  • 程序员必须掌握的算法:编程之路的基石
    作为一名程序员,我深知算法在编程中的重要性。算法不仅是编程的基础,更是我们解决问题、优化程序的关键。下面,我将介绍一些程序员在编程中需要掌握的基本算法,并强调算法在编程中的重要性,同时提供一些实用的算法学习资源。基本算法介绍与实现1.快速排序(QuickSort)快速排序......
  • Golang 百题(实战快速掌握语法)_1
    整形转字符串类型实验介绍本实验将展示三种方法来实现整形类型转字符串类型。知识点strconvfmtItoa函数代码实例Go语言中strconv包的itoa函数输入一个int类型,返回转换后的字符串。下面是一个例子。packagemainimport("fmt""strconv")funcmai......
  • Vue3动态组件的基本用法
     和Vue2动态组件写法不同的是,:is传递的内容需要先定义,再给:is使用<template><div><component:is="currentComponent"></component></div></template><scriptsetup>importMyComponentfrom'./MyComponent.vue';......
  • 这个vue3的后台管理系统虽然简洁但不简单
    今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容——Nova-admin Nova-adminNova-admin 是一个基于Vue3、Vite5等最新技术的后台管理平台。用简单的方式实现完整功能,并尽可能的考虑代码规范,易读易理解无过度封装,方便二次......
  • vue3生命周期
    Vue3中有两个注册生命周期的方法,第一个是选项式的API风格,另一个的组合式的API风格。Vue3的生命周期完全兼容Vue2的生命周期。生命周期选项可以和组合式API中的生命周期钩子混合使用,不过最好不要将两者混合使用。生命周期的实现原理其实就是先将用户注册的生命周......
  • 通过Vue3+高德地图的JS API实现市区地图渲染
    效果图:核心代码:<scriptsetup>import{onMounted,onUnmounted}from'vue';importAMapLoaderfrom'@amap/amap-jsapi-loader';import{message}from'ant-design-vue';importschoolfrom'@/assets/icons/school......
  • Vue3——watch监视
    watch监视的作用watch:监视数据的变化,与Vue2中的watch作用相同。特点:Vue3中的watch只能监视以下四种数据:ref定义的数据reactive定义的数据函数返回的一个值(getter函数)一个包含上述情况的数组语法:       watch(参数1,参数2,参数3)       参数1:被监视的数据......