五分钟搞懂Vuex实用知识(小结)

五分钟搞懂Vuex实用知识(小结)攻略

1.简介

Vuex是Vue.js应用程序开发的首选架构,它是一个状态管理库,将状态集中管理。Vuex主要解决了Vue.js的组件通信和数据共享的问题。

2.核心概念

Vuex的核心概念包括:

  • State:状态,即应用程序中的数据。
  • Getters:获取状态,用于获取State中的值并进行处理后输出。
  • Mutations:更改状态,用于直接更改State的值。
  • Actions:业务逻辑的封装,用于触发Mutations更改State的值。
  • Modules:模块化,将State、Getters、Mutations、Actions按模块拆分。

3.示例说明

3.1 简单示例:计数器

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  },
  getters: {
    getCount: state => state.count
  }
})

export default store

上述代码定义了一个简单的计数器,使用Vuex管理状态。State包含计数器的初始值0,Getters用于获取计数器的值,Mutations用于直接更改State的值,Actions用于异步触发Mutations的更新操作。

// Counter.vue
<template>
  <div>
    <div>count: {{ count }}</div>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
    <button @click="incrementAsync">+ Async</button>
  </div>
</template>

<script>
import { mapGetters, mapMutations, mapActions } from 'vuex'

export default {
  computed: {
    ...mapGetters(['getCount']),
    count() {
      return this.getCount
    }
  },
  methods: {
    ...mapMutations(['increment', 'decrement']),
    ...mapActions(['incrementAsync'])
  }
}
</script>

上述代码定义了一个计数器组件,使用Vuex管理状态。组件通过mapMutations、mapActions、mapGetters等辅助函数将Vuex的Getters、Mutations、Actions映射到组件的计算属性和方法中,从而实现了对Vuex的便捷使用。

3.2 示例:购物车

下面我们用购物车的例子来更深入的学习Vuex。

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    cart: []
  },
  mutations: {
    addToCart(state, item) {
      const existItem = state.cart.find(cartItem => cartItem.id === item.id)
      if (existItem) {
        existItem.quantity++
      } else {
        state.cart.push({
          ...item,
          quantity: 1
        })
      }
    },
    removeFromCart(state, item) {
      const index = state.cart.indexOf(item)
      state.cart.splice(index, 1)
    }
  },
  getters: {
    getCart: state => state.cart,
    getTotalPrice: state => {
      let price = 0
      state.cart.forEach(item => {
        price += item.price * item.quantity
      })
      return price
    }
  }
})

export default store

上述代码定义了一个购物车的示例,使用Vuex管理状态。State包含了一个购物车数组,包含多个商品项(例子这里只定义了两个item),每个商品包括id,name,img,price和quantity(表示数量)等属性。Getters用于获取购物车信息和计算购物车总价,Mutations用于更改State的值。

// Cart.vue
<template>
  <div>
    <h2>Cart</h2>
    <div v-for="item in cart" :key="item.id">
      <img :src="item.img" width="100">
      <div>
        <p>{{ item.name }}</p>
        <p>{{ item.price }}</p>
        <p>Quantity: {{ item.quantity }}</p>
        <button @click="removeFromCart(item)">remove</button>
      </div>
    </div>
    <div>Total: {{ totalPrice }}</div>
  </div>
</template>

<script>
import { mapGetters, mapActions } from 'vuex'

export default {
  computed: {
    ...mapGetters(['getCart', 'getTotalPrice']),
    cart() {
      return this.getCart
    },
    totalPrice() {
      return this.getTotalPrice
    }
  },
  methods: {
    ...mapActions(['addToCart', 'removeFromCart'])
  },
  created() {
    this.addToCart({
      id: 1,
      name: 'Macbook Pro',
      img: 'https://source.unsplash.com/Nl43QfASCZY/200x150',
      price: 10000
    })
    this.addToCart({
      id: 2,
      name: 'iPhone 12',
      img: 'https://source.unsplash.com/RJtyO__-t1I/200x150',
      price: 5999
    })
  }
}
</script>

上述代码定义了一个购物车组件,使用Vuex管理状态。组件通过mapGetters、mapActions等辅助函数将Vuex的Getters和Actions映射到组件的计算属性和方法中,从而实现了对Vuex的便捷使用。组件在created的钩子函数中使用两个Action将商品加入购物车。

以上两个示例展示了如何在Vue.js应用中使用Vuex,通过理解其中的核心概念,我们可以将Vuex运用到更加复杂的应用中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:五分钟搞懂Vuex实用知识(小结) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 概述VUE2.0不可忽视的很多变化

    概述VUE2.0不可忽视的很多变化 Vue.js 2.0是一款非常流行的JavaScript框架,它的新版本带来了很多变化。以下是一些新特性和变化的完整攻略: 渐进渲染 Vue.js 2.0中引入了渐进渲染的概念。这意味着Vue现在可以立即渲染尽可能多的内容,而不是等待整个视图准备好之后再一次性渲染出来。这样可以加快首次渲染的速度,提高用户体验。 <t…

    Vue 2023年5月28日
    00
  • 利用Vue实现一个markdown编辑器实例代码

    下面是使用Vue实现一个markdown编辑器的完整攻略,包含以下步骤: 一、创建Vue项目并安装必要的依赖 (示例代码一) 首先,在命令行中进入项目目录,使用以下命令创建一个Vue项目: vue create markdown-editor 然后进入该项目的目录,使用以下命令安装必要的依赖: npm install marked vue-markdown-…

    Vue 2023年5月27日
    00
  • Vue如何实现变量表达式选择器

    Vue中实现变量表达式选择器,需要使用Vue的计算属性computed以及Vue的模板语法。下面是完整的攻略,包括两个示例说明: 步骤一:定义计算属性 在Vue组件中,我们可以使用计算属性computed来定义一个具有getter函数的属性。该getter函数可以根据组件的数据data以及其他Vue实例的数据来计算出该计算属性的值。因此,我们可以使用计算属性…

    Vue 2023年5月27日
    00
  • vue多环境配置之 .env配置文件详解

    Vue多环境配置之.env配置文件详解 什么是.env配置文件 .env配置文件是对不同环境下的应用程序进行配置的文件。它不应该存在于版本控制系统中,因为该文件可能包含敏感信息,比如数据库密码、API密钥等。 在Vue项目中,.env是一个前缀为名字的文件,其中的变量可以在应用程序中访问。在不同环境下,可以创建不同的.env文件。Webpack在打包过程中,…

    Vue 2023年5月28日
    00
  • vue中常见的问题及解决方法总结(推荐)

    Vue中常见问题及解决方法总结 1. Vue中常见问题 1.1. Vue组件之间通信 在Vue中,通信是组件之间的一个重要问题。通信包括父子组件之间的通信、兄弟组件之间的通信,还有隔代组件之间的通信等。通信方式有很多种,包括props/$emit、$parent/$children、事件总线、Vuex等。 1.1.1. Props/$emit Props/$…

    Vue 2023年5月27日
    00
  • vue 表单输入格式化中文输入法异常问题

    下面将详细讲解“vue 表单输入格式化中文输入法异常问题”的攻略: 什么是格式化表单输入? 格式化表单输入是指将用户输入的数据按照一定格式进行处理,以达到方便用户阅读和使用的目的。比如,将用户输入的手机号码在每四位数字之间加上一个空格或短横线,或者将用户输入的银行卡号在每四位数字之间添加空格。 vue 表单输入格式化中文输入法异常问题 在使用 vue 编写表…

    Vue 2023年5月28日
    00
  • 浅析Vue中Virtual DOM和Diff原理及实现

    浅析Vue中Virtual DOM和Diff原理及实现 Virtual DOM是什么? Virtual DOM(虚拟DOM)是一种用来描述真实DOM的JavaScript对象,作为对真实DOM的一种抽象。它拥有和真实DOM树形结构相同的属性,并且它可以通过计算更新前后两个Virtual DOM的差异,实现部分更新,从而提高渲染效率。 Vue中的Virtual…

    Vue 2023年5月28日
    00
  • Vue配置文件vue.config.js配置前端代理方式

    当我们在开发Vue项目时,有时候需要通过前端代理方式来解决跨域的问题。在Vue项目中实现前端代理的方式有很多种,本文将详细介绍如何通过配置Vue的配置文件vue.config.js实现前端代理方式。 vue.config.js文件 vue.config.js是一个可选的配置文件,如果项目的根目录中存在该文件,则该文件会被@vue/cli-service自动加…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部