五分钟搞懂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日

相关文章

  • vue实现分页功能

    下面给出“Vue实现分页功能”的完整攻略: 1.需求分析 要实现分页功能,我们首先需要对其进行需求分析。常见的分页功能通常包含以下需求: 当前页码的展示; 总页数的展示; 点击页码进行跳转; 上一页和下一页的按钮; 可以手动输入页码进行跳转。 2.实现方法 根据需求分析,我们可以采用以下方法来实现: 2.1.设置数据和计算属性 首先,在Vue实例中设置两个数…

    Vue 2023年5月29日
    00
  • Vue的样式绑定详解

    下面是“Vue的样式绑定详解”的完整攻略: 什么是Vue样式绑定? Vue样式绑定是一种可以动态改变组件内部各元素(如div、p、h1等)样式的机制。它可以根据函数或布尔值(true/false)动态改变组件内部各元素的样式,实现样式的可配置性。 语法 Vue样式绑定的语法非常简单,如下所示: 对象语法 <div v-bind:style="…

    Vue 2023年5月27日
    00
  • Vue自定义Form组件实现方法介绍

    下面详细讲解“Vue自定义Form组件实现方法介绍”的完整攻略。 什么是自定义Form组件? 自定义Form组件是指,开发者可以使用Vue框架中提供的组件相关API自己封装一个表单组件,以便于实现业务需求。这种自定义Form组件可以根据不同的业务需求来进行设计,而且重用率非常高,可以减少重复的代码。 实现方法 实现Vue自定义Form组件的方法如下: 1.编…

    Vue 2023年5月27日
    00
  • vue3版本网页小游戏设计思路

    下面就详细讲解“vue3版本网页小游戏设计思路”的完整攻略。 一、介绍 Vue 3是一款前端开发框架,它能够帮助我们快速、高效地开发网页应用。本文将介绍如何使用Vue 3开发一个简单的网页小游戏。 二、设计思路 本次小游戏的开发思路如下: 使用Vue 3来构建界面,使用Vue Router来管理页面路由; 使用Canvas绘制游戏界面、角色和道具; 使用We…

    Vue 2023年5月27日
    00
  • 使用canvas仿Echarts实现金字塔图的实例代码

    使用canvas模拟 Echarts 实现各种图表类型,并非易事,尤其是对于初学者。但是,在较少甚至没有 Echarts 库的情况下,这种方法能够使你实现各种基本图形类型,受控制的小部件,重新构建以及基于自定义的视觉样式。 实现金字塔图的攻略 以下为使用 canvas 绘制金字塔图的实现步骤: 步骤 1 – 创建 HTML 元素 创建 HTML5 页面,并添…

    Vue 2023年5月28日
    00
  • Vue.component的属性说明

    下面详细讲解一下Vue中的组件属性说明。 Vue.component的属性说明 在Vue中,组件的一些常用属性可以用Vue.component进行定义。下面是Vue.component的主要属性说明: props props属性用于接收父组件传递过来的数据,在组件内部通过 this.$props 访问。它是一个数组或对象,数组中的元素可以是字符串或对象。如果…

    Vue 2023年5月27日
    00
  • vue directive定义全局和局部指令及指令简写

    请允许我用详细的方式来讲解一下”Vue Directive定义全局和局部指令及指令简写”的完整攻略。 Vue Directive指令 Vue Directive指令是Vue中最常用和最重要的部分之一,它可以让你在DOM模板中通过特定的方式操作DOM元素及其属性。Vue指令以”v-“开头,例如”v-if”,”v-for”,”v-bind”等等。我们可以通过自定…

    Vue 2023年5月28日
    00
  • vue.js中Vue-router 2.0基础实践教程

    下面是“vue.js中Vue-router 2.0基础实践教程”的完整攻略: 什么是Vue-router? Vue-router是Vue.js官方的路由管理器。它与Vue.js深度集成,可以非常方便地实现单页应用中的路由跳转、参数传递、路由拦截等功能。Vue-router的核心概念包括路由、参数、钩子、子路由等。 安装和使用Vue-router 安装Vue-…

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