vuex和pinia

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

Vuex和Pinia都是Vue.js的状态管理库,用于帮助开发者更好地组织和管理应用中的状态。

Vuex

Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态的一致性。在Vue.js中,当应用变得复杂且组件数量增多时,组件之间的通信和状态管理会变得复杂和冗余。Vuex通过提供一个全局的状态管理机制,将应用中的状态存储在一个单一的、可预测的状态树中(即store),并允许任何组件访问和修改这些状态。

Vuex的核心概念包括:

  • state:用于存储应用的状态。
  • mutations:用于修改state中的状态,且必须是同步函数。
  • actions:用于处理异步操作,通过提交mutation来间接修改state。
  • getters:用于获取派生状态,即基于state的计算属性。

示例

假设我们有一个购物车应用,需要管理购物车中的商品列表。我们可以使用Vuex来管理这个状态。

import Vue from 'vue'  
import Vuex from 'vuex'  
  
Vue.use(Vuex)  
  
const store = new Vuex.Store({  
  state: {  
    shopCarArr: [/* 初始购物车商品列表 */]  
  },  
  mutations: {  
    addToCart(state, product) {  
      // 将商品添加到购物车  
      state.shopCarArr.push(product)  
    },  
    removeFromCart(state, productId) {  
      // 从购物车中移除商品  
      const index = state.shopCarArr.findIndex(item => item.id === productId)  
      if (index !== -1) {  
        state.shopCarArr.splice(index, 1)  
      }  
    }  
  },  
  actions: {  
    async fetchProducts({ commit }) {  
      // 异步获取商品列表,并提交mutation更新状态  
      const products = await fetchProductsFromApi()  
      commit('updateProducts', products)  
    }  
  },  
  getters: {  
    cartTotal(state) {  
      // 计算购物车总价  
      return state.shopCarArr.reduce((total, product) => total + product.price, 0)  
    }  
  }  
})

在组件中,我们可以通过this.$store.state.shopCarArr访问购物车列表,通过this.$store.commit('addToCart', product)添加商品到购物车,以及通过this.$store.dispatch('fetchProducts')异步获取商品列表。同时,我们还可以使用this.$store.getters.cartTotal获取购物车总价。

Pinia

Pinia是Vue.js的另一个状态管理库,由Vue的作者维护。它采用了去中心化的架构,将状态分布在多个模块中,每个模块拥有自己的状态、mutations和actions。这使得Pinia在一些小型或简单的项目中可能更容易上手。同时,Pinia在设计之初就对TypeScript提供了原生的支持,提供了更好的类型推导和类型检查的支持。

示例

同样以购物车应用为例,使用Pinia管理状态可能如下所示:

 文章来源地址https://www.toymoban.com/news/detail-846187.html

import { defineStore } from 'pinia'  
  
export const useShopCartStore = defineStore({  
  id: 'shopCart',  
  state: () => ({  
    shopCarArr: [/* 初始购物车商品列表 */]  
  }),  
  actions: {  
    addToCart(product) {  
      this.shopCarArr.push(product)  
    },  
    removeFromCart(productId) {  
      const index = this.shopCarArr.findIndex(item => item.id === productId)  
      if (index !== -1) {  
        this.shopCarArr.splice(index, 1)  
      }  
    },  
    async fetchProducts() {  
      const products = await fetchProductsFromApi()  
      this.shopCarArr = products  
    }  
  },  
  getters: {  
    cartTotal: (state) => {  
      return state.shopCarArr.reduce((total, product) => total + product.price, 0)  
    }  
  }  
})

在组件中,我们可以使用const shopCart = useShopCartStore()来获取store的实例,并通过shopCart.shopCarArr访问购物车列表,通过shopCart.addToCart(product)添加商品到购物车,以及通过shopCart.fetchProducts()异步获取商品列表。同样地,我们可以使用shopCart.cartTotal获取购物车总价。

Vuex和Pinia在开发中存在一些显著的区别,这些区别主要体现在设计理念、结构、语法以及使用场景等方面。

首先,从设计理念上看,Vuex采用全局单例模式,通过一个store对象来管理所有的状态,组件通过store对象来获取和修改状态。而Pinia则采用了分离模式,每个组件都拥有自己的store实例,通过在组件中创建store实例来管理状态。这种设计使得Pinia在处理复杂组件间的状态共享时更加灵活和高效。

其次,从结构上看,Pinia没有mutations,只有state、getters和actions,这与Vuex有所不同。Vuex有State、Getters、Mutations和Actions等核心特性,其中Mutations用于同步地修改state中的数据。而Pinia通过设计提供扁平结构,每个store都是互相独立的,没有命名空间,使得代码分割更加清晰且易于管理。

再者,从语法和使用上看,Pinia的语法比Vuex更容易理解和使用。Pinia提供了更好的TypeScript支持,使得代码类型检查更加准确,有助于提高代码质量和开发效率。同时,Pinia支持Vue3和Vue2,可以无缝地与不同版本的Vue.js配合使用,为开发者提供了更大的灵活性。

最后,从使用场景上看,Vuex更适合用于大型项目或需要集中管理共享数据的场景。而Pinia则更适合用于小型或中型项目,以及需要更灵活和高效的状态管理的场景。

 

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

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

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

相关文章

  • Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 4(axios)

      axios 是一个基于 Promise 的 HTTP 客户端,不仅可以与 vue.js 一起使用,还可以与其他前端框架以及后端 Node.js 一起使用。当你想从包括后端服务器在内的外部服务获取数据时,可以使用axios 中的方法很方便的获得数据内容。在本文档中,我们将介绍如何在 vue.js 版本 3 的环境

    2024年02月07日
    浏览(37)
  • vue3中状态管理库pinia的安装和使用方法介绍及和vuex的区别

    Pinia 与 Vuex 一样,是作为 Vue 的“状态存储库”,用来实现 跨页面/组件 形式的数据状态共享。它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话,你可能会认为可以通过一行简单的 export const state = reactive({}) 来共享一个全局状态。 当该数据、方法在很多地方都需要

    2024年01月20日
    浏览(44)
  • 抛弃Vuex,使用Pinia

    1.简介 官网 Pinia 起始于 2019 年 11 月左右的一次实验,其目的是设计一个拥有组合式 API 的 Vue 状态管理库。从那时起,我们就倾向于同时支持 Vue 2 和 Vue 3,并且不强制要求开发者使用组合式 API,我们的初心至今没有改变。除了 安装 和 SSR 两章之外,其余章节中提到的 API 均

    2024年02月06日
    浏览(39)
  • vuex和pinia

    Vuex和Pinia都是Vue.js的状态管理库,用于帮助开发者更好地组织和管理应用中的状态。 Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态的一致性。在Vue.js中,当应用变得复杂且组件数量增多时,组件之

    2024年04月10日
    浏览(20)
  • Vue | Vue.js 全家桶 Pinia状态管理

    🖥️ Vue .js专栏:Node.js Vue.js 全家桶 Pinia状态管理 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、Pinia和Vuex的对比 什么是Pinia呢? Pina和

    2024年01月16日
    浏览(52)
  • 前端vue入门(纯代码)21_vuex

    努力不一定成功,但是,不努力一定很轻松!!! 【 23.Vuex 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 问题1:Vuex是什么? 【官方理解1】:Vuex 是一个专为 Vue.js 应用程序开发的 状态【数据】管理模式 。它采用集中式存储管理应用的所有组件的状态,并以相应

    2024年02月13日
    浏览(55)
  • 前端Vue入门-day07-Vuex入门

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境  创建一个空仓库 state 状态 1. 提供数据: 2. 使用数据: mutations  辅助函数 - mapMutations actions 辅助函数 - mapAc

    2024年02月14日
    浏览(41)
  • 前端开发小技巧 - 【Vue3 + TS】 - 在 TS + Vue3 中使用 Pinia,实现 Pinia 的持久化,优化Pinia(仓库统一管理)

    ts 中使用 pinia 和 Vue3 基本一致,唯一的不同点在于,需要根据接口文档给 state 标注类型,也要给 actions 标注类型; 以下都是 组合式API 的写法, 选项式API 的写法大家可以去官网看看; Pinia; 持久化插件 - pinia-plugin-persistedstate; 目标文件: src/types/user.d.ts (这里以 user.d.t

    2024年04月09日
    浏览(55)
  • 【前端Vue】Vue3+Pinia小兔鲜电商项目第2篇:什么是pinia,1. 创建空Vue项目【附代码文档】

    Pinia 是 Vue 的专属状态管理库,可以实现跨组件或页面共享状态,是 vuex 状态管理工具的替代品,和 Vuex相比,具备以下优势 提供更加简单的API (去掉了 mutation ) 提供符合组合式API风格的API (和 Vue3 新语法统一) 去掉了modules的概念,每一个store都是一个独立的模块 搭配

    2024年03月21日
    浏览(48)
  • Vue3.0 vue.js.devtools无法显示Pinia调试工具

    之前的配置方式: 更新配置方式: 设置之后即可显示调试工具

    2024年03月11日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包