Vue状态管理库-Pinia

这篇具有很好参考价值的文章主要介绍了Vue状态管理库-Pinia。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Pinia是什么?

Pinia 是 Vue 的专属状态管理库,它允许支持跨组件或页面共享状态,即共享数据,他的初始设计目的是设计一个支持组合式API的 Vue 状态管理库(因为vue3一个很大的改变就是组合式API),当然这并不是说Pinia只支持vue3,他是同时支持vue2和vue3的,本文倾向于拥抱Vue3,所以代码语法都是倾向用组合式api的写法

二、在vue3中使用Pinia

下面的流程和相关代码均基于vue3项目

1、安装pinia

npm install pinia

或用yarn安装

yarn add pinia

package.json中看到pinia表示安装成功 

Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

2、创建pinia实例并将其传递给应用

//src/main.js

//创建应用实例
import { createApp } from "vue";
import App from "./App.vue";
let app = createApp(App);

//pinia实例
import { createPinia } from "pinia";
let pinia = createPinia();
app.use(pinia);

app.mount("#app");

挂载完成后,我们就可以在Vue的devtools里看到Pinia了

3、定义Store

Store 是用 defineStore() 定义的,它的第一个参数要求是一个独一无二的名字,在整个应用中保持唯一, 返回的函数命名为 use... 是一个符合组合式函数风格的约定

import { defineStore } from "pinia";

//命名规则,建议以 `use` 开头且以 `Store` 结尾,即 use~~~Store
export const useMapStore = () => {

    // 其他配置...
}

Setup store(Option Store可以查看官方,本文不列举)

import { defineStore } from "pinia";
import { reactive, computed } from "vue";
import type { City, Province } from "@/interface/common";

export const useMapStore = defineStore("mapStore", () => {
  //state
  let cityList = reactive<Array<City>>([]);
  let provinceList = reactive([]);

  //getter
  const simpleCityList = computed(() => {
    return cityList.filter((item) => item.code != "110000");
  });

  //actions
  function changeCityList(list: City[]) {
    console.log("修改城市列表数据的事件被触发");
    cityList = Object.assign(cityList, list);
  }
  function changeProviceList(list: Province[]) {
    console.log("修改省份列表数据的事件被触发");
    provinceList = Object.assign(provinceList, list);
  }

  return {
    cityList,
    provinceList,
    simpleCityList,
    changeCityList,
    changeProviceList,
  };
});

 

4、使用store

<template>
    <div>您好!欢迎来到星野的小世界</div>
    <div>星野的目标是走遍中国的每一个省,中国的省如下:</div>
    <div>
        <ul>
            <li v-for="city in cityList" :key="city.code">
                {{ city.name }}
            </li>
        </ul>
    </div>
</template>

<script setup lang='ts' name='Login'>
import { onMounted} from 'vue';
import { storeToRefs } from 'pinia';
import { getCityList } from "@/utils/common";
import { useMapStore } from '@/stores/map'

let mapStore = useMapStore()
let { cityList } = storeToRefs(mapStore) //为了从 store 中提取属性时保持其响应性,需要使用 storeToRefs()。它将为每一个响应式属性创建引用

onMounted(async () => {
    let list = await getCityList()
    mapStore.changeCityList(list) //修改store里的属性数据
})
</script>
<style lang='scss' scoped></style>

getCityList是一个工具函数,调用一个免费api获取中国的城市数据 

Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

在 Setup Store 中:

  • ref() /reactive ( ) 就是 state 属性
  • computed() 就是 getters
  • function() 就是 actions

页面效果

Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

5、修改store中的state

例如store中的state有一个城市统计属性: cityCount

Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

在业务组件里,就可以通过mapStore.cityCount 直接修改数量

Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

 Vue状态管理库-Pinia,Vue,vue.js,前端,Pinia,状态管理,vue状态管理

如果state有很多属性,还可以调用 $patch 方法。它允许你用一个 state 的补丁对象在同一时间更改多个属性

 mapStore.$patch({
        cityCount: mapStore.cityCount + 1,
        provinceCount: mapStore.provinceCount + 1
    })

好啦,Pinia 满足基础使用的读写改操作已经描述完毕,关于搭配 Nuxt 的 Pinia 完成SSR,后续会单独出文,敬请期待!😁

ps: 学习成长过程的简单记录,如有不恰当之处,欢迎交流文章来源地址https://www.toymoban.com/news/detail-836653.html

到了这里,关于Vue状态管理库-Pinia的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue全家桶】Pinia状态管理

    🤗这里是前端程序员小张! 🌻人海茫茫,感谢这一秒你看到这里。希望我的文章对你的有所帮助! 🌟愿你在未来的日子,保持热爱,奔赴山海! Pinia开始于大概2019年,其目的是设计一个拥有 组合式 API 的 Vue 状态管理库 目前同时兼容Vue2、Vue3,也并不要求你使用Compositio

    2023年04月09日
    浏览(63)
  • vue3学习-Pinia状态管理

    定义一个Store 这个 name ,也称为 id ,是必要的,Pinia 使用它来将 store 连接到 devtools。 将返回的函数命名为 use… 是跨可组合项的约定,以使其符合你的使用习惯。 使用 store 一旦 store 被实例化,你就可以直接在 store 上访问 state 、 getters 和 actions 中定义的任何属性 store 是一

    2024年02月14日
    浏览(40)
  • vue3 快速入门系列 —— 状态管理 pinia

    其他章节请看: vue3 快速入门 系列 vue3 状态管理这里选择 pinia。 虽然 vuex4 已支持 Vue 3 的 Composition API,但是 vue3 官网推荐新的应用使用 pinia —— vue3 pinia redux、mobx、vuex、pinia都是集中式状态管理工具。与之对应的就是分布式。 Pinia 符合直觉 的 Vue.js 状态管理库 甚至让你忘

    2024年04月26日
    浏览(36)
  • Vue最新状态管理工具Pinia——彻底搞懂Pinia是什么

    知识专栏 专栏链接 Vuex知识专栏 https://blog.csdn.net/xsl_hr/category_12158336.html?spm=1001.2014.3001.5482 Vuex官方文档 https://vuex.vuejs.org/zh/ Pinia官方文档 https://pinia.web3doc.top/ 最近在 前端的深入学习过程 中,接触了与 状态管理 相关的内容,涉及到 与vue2适配的vuex 和 与vue3适配的pinia ,因此

    2024年02月03日
    浏览(51)
  • vue:状态管理库及其部分原理(Vuex、Pinia)

    多组件的状态共享问题: 当多个组件需要访问和修改相同的数据时,我们需要在组件之间传递 props或者使用事件总线。当,应用就会变得难以维护和调试。 多组件状态同步问题: 当一个组件修改了状态,其他组件可能无法立即得知该变化。 状态变更的追踪问题: 无法追踪

    2024年01月19日
    浏览(50)
  • Vue2向Vue3过度Vue3状态管理工具Pinia

    Pinia 是 Vue 的专属的最新状态管理库 ,是 Vuex 状态管理工具的替代品 后面在实际开发项目的时候,Pinia可以在项目创建时自动添加,现在我们初次学习,从零开始: 使用 Vite 创建一个空的 Vue3项目 按照官方文档安装 pinia 到项目中 定义store 组件使用store Pinia中的 getters 直接使

    2024年02月11日
    浏览(48)
  • vue 全局状态管理(简单的store模式、使用Pinia)

    多个组件可能会依赖同一个状态时,我们有必要抽取出组件内的共同状态集中统一管理,存放在一个全局单例中,这样任何位置上的组件都可以访问其中的状态或触发动作 通过自定义一个store模式实现全局的状态管理,实例如下 有两个组件a、b共享store和store2两个状态,我们

    2024年02月13日
    浏览(51)
  • 深入 Pinia:从代码出发探索 Vue 状态管理的奥秘

    🍍 项目地址:https://github.com/mk965/read-pinia 🧑🏼‍💻 本节代码:https://github.com/mk965/read-pinia/tree/article_1 🚗源码地址: github.com/vuejs/pinia 📦打包文件: rollup.config.js 🚪入口文件: packages/pinia/src/index.ts 将 pinia/packages/pinia/src 目录下的所有文件复制到我们之前生成项目的 /src

    2023年04月25日
    浏览(94)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

    Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态) :Vuex 使用单一状态树,即一个对象包含全部的应用层级状态。这个状态树对应着一个应用中的所有状态。 Gett

    2024年01月23日
    浏览(48)
  • vue 3 第三十一章:状态管理(Pinia基础知识)

    状态管理是现代 Web 应用开发中的一个重要概念。Vue 3 中的状态管理库 Pinia ,是一个基于 Vue 3 Composition API 的状态管理库,它提供了一种 简单 、 灵活 的方式来管理应用程序的状态,同时还具有 高性能 和 可扩展性 。 Pinia 在某种程度上来说,也可以被叫做 Vuex5 ,因为它结合

    2024年02月07日
    浏览(99)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包