vue3新一代状态管理库 Pinia

简介: vue3新一代状态管理库 Pinia

Pinia优势
Pinia是一个全新的Vue状态管理库,是Vuex的代替者,尤雨溪强势推荐
1.Vue2 和 Vue3 都能支持
2.抛弃传统的 Mutation ,只有 state, getter 和 action ,简化状态管理库
3.不需要嵌套模块,符合 Vue3 的 Composition api,让代码扁平化
4.TypeScript支持

Pinia 基本使用
初始化项目: npm init vite@latest
安装Pinia: npm i pinia

挂载Pinia

import {
    createPinia } from 'pinia'
const pinia = createPinia()
createApp(App).use(pinia)
创建Store
import {
    defineStore } from "pinia";

export const useStore = defineStore('main', {
   
  state: () => {
   
    return {
   
      msg: 'hello world hhhh',
      Number: 1
    }
  },
  getters: {
   },
  actions: {
   }
})

使用Store

<template>
  <div>HelloWorld</div>
  <div>{
   {
   store.msg}}</div>
</template>

<script setup lang="ts">
import {
    useStore } from "../index";
const store = useStore()
</script>

解构Store
当store中的多个参数需要被使用到的时候,为了更简洁的使用这些变量,我们通常采用结构的方式一次性获取所有的变量名

ES传统方式解构(能获取到值,但是不具有响应性)

<template>
  <div>HelloWorld</div>
  <div>{
   {
    store.msg }}</div>
  <div>{
   {
    number }}</div>
  <button @click="number++">+++</button>
</template>

<script setup lang="ts">
import {
    useStore } from "../index";
const store = useStore();
const {
    number } = store;
</script>

<style scoped></style>
Pinia解构方法:storeToRefs
<template>
  <div>HelloWorld</div>
  <div>{
   {
    store.msg }}</div>
  <div>{
   {
    number }}</div>
  <button @click="number++">+++</button>
</template>

<script setup lang="ts">
import {
    storeToRefs } from "pinia";
import {
    useStore } from "../index";
const store = useStore();
// const { number } = store;
const {
    number } = storeToRefs(store);
</script>

<style scoped></style>

多条数据修改
通过基础数据修改方式去修改多条数据也是可行的,但是在 pinia 官网中,已经明确表示$patch 的方式是经过优化的,会加快修改速度,对性能有很大好处,所以在进行多条数据修改的时候,更推荐使用$patch

$patch 方法可以接受两个类型的参数,函数 和 对象
$patch + 对象
$patch + 函数: 通过函数方式去使用的时候,函数接受一个 state 的参数,state 就是 store 仓库中的 state

const change = () => {
   
  store.$patch({
   
    msg: 'hhhhhhhhhhhh',
    number: store.number + 100
  })
}

const change1 = () => {
   
  store.$patch((state)=> {
   
    state.msg = 'hhhhhhhhhhhh'
    state.number = state.number + 100
  })
}

Pinia中的Getters
Pinia 中的 getter 和 Vue 中的计算属性几乎一样,在获取 State值之前做一些逻辑处理getter 中的值有缓存特性,如果值没有改变,多次使用也只会调用一次添加 getter方法

getters: {
   
    addNumber(state) {
   
      return state.number * state.number1
    }
  },

<div>{
   {
   store.addNumber}}</div>
<div>{
   {
   store.addNumber}}</div>
<div>{
   {
   store.addNumber}}</div> //多次调用也只会执行一次

getter 中不仅可以传递 state 直接改变数据状态,还可以使用 this 来改变数据,但要说明对应类型

getters: {
   
    addNumber():any {
   
      // return state.number * state.number1
      return this.msg
    }
  },

store之间的相互调用
在 Pinia 中,可以在一个 store 中 import 另外一个 store ,然后通过调用引入 store 方法的形式,获取引入 store 的状态

export const useStore = defineStore('use', {
   
  state: () => {
   
    return {
   
      msg: 'hello world hhhhxxx',
      number: 2,
      number1: 3
    }
  },
  getters: {
   
    addNumber():any {
   
      // return state.number * state.number1
      return this.msg
    }
  },
  actions: {
   

  }
})

export const mainStore = defineStore('main', {
   
  state: () => {
   
    return {
   
      msg: 'hello world hhhh',
      number: 1
    }
  },
  getters: {
   
    addNumber() {
   
      console.log(useStore().msg);
    }
  },
  actions: {
   }
})

总结
总得来说,Pinia 就是 Vuex 的替代版,可以更好的兼容 Vue2,Vue3以及TypeScript。在Vuex的基础上去掉了 Mutation,只保留了 state, getter和action。Pinia拥有更简洁的语法, 扁平化的代码编排,符合Vue3 的 Composition api

相关文章
|
18天前
|
存储 JavaScript
解锁Vuex高级玩法:模块化与插件共舞,让你的Vue项目状态管理如虎添翼!
【8月更文挑战第27天】Vuex是一款专为Vue.js应用程序设计的状态管理模式及库,它通过集中管理组件状态来确保状态变更的可预测性。在大型应用中,采用模块化管理可以让代码结构更加清晰,同时利用插件增强功能。模块化管理允许将store拆分为包含各自state、mutations、actions和getters的独立模块。插件则能监听状态变化,实现诸如日志记录或数据持久化等功能。本文通过具体示例介绍了如何在Vuex中实现模块化管理和插件的高级应用。
31 1
|
15天前
|
存储 JavaScript 前端开发
Vue.js + Vuex:解锁前端复杂应用的神秘钥匙,探索状态管理的新境界!
【8月更文挑战第30天】Vue.js结合Vuex状态管理,为复杂前端应用提供了解锁高效与优雅的金钥匙。Vue.js凭借简洁的API和高效虚拟DOM更新机制广受好评,但在大规模应用中,组件间状态共享变得复杂。这时,Vuex通过中心化状态存储,使状态管理清晰可见,如同为Vue.js应用增添智慧大脑。例如,在购物车应用中,Vuex通过`state`、`mutations`、`actions`和`getters`清晰管理状态,简化组件间状态同步,减少耦合,确保单一状态源,使开发更加高效有序。在Vue.js的世界里,Vuex是一位智慧管家,让前端开发不仅高效,更成为一门艺术。
10 0
|
22天前
|
Web App开发 JavaScript 安全
Vue状态管理库Pinia详解
Pinia 是一款专为 Vue 设计的状态管理库,它提供了一套简洁且直观的 API,旨在简化状态管理流程。Pinia 的设计理念强调简单性和易用性,相较于 Vuex,它摒弃了许多复杂的概念如 mutations 和模块的深层嵌套结构,转而提供一种更现代化且与 Vue 3 Composition API 高度兼容的状态管理模式。
|
4天前
|
JavaScript
vue学习(3)模板语法
vue学习(3)模板语法
34 11
|
4天前
|
存储 JavaScript 前端开发
vue学习(2)
vue学习(2)
194 65
|
4天前
|
JavaScript 算法 前端开发
vue学习(1)
vue学习(1)
194 62
|
3天前
|
JavaScript
vue学习(4)数据绑定
vue学习(4)数据绑定
16 10
|
3天前
|
JavaScript 前端开发
vue学习(6)
vue学习(6)
20 9
|
3天前
|
JavaScript 开发者
vue学习(5)
vue学习(5)
17 7
|
4天前
|
JavaScript
vue键盘事件
vue学习(11)键盘事件