vuex学习总结

Vuex学习总结

简介

Vuex是Vue.js的状态管理库,用于管理应用程序中的状态。通过Vuex,我们可以将应用程序中的状态集中管理,提高代码的可维护性和可扩展性。

核心概念

Vuex中有以下几个核心概念:

  • State:状态,即应用程序中的数据。
  • Getter:获取器,用于从状态中获取数据。
  • Mutation:变更,用于修改状态。
  • Action:动作,用于提交Mutation。

安装和引入

可以使用npm安装Vuex:

npm install vuex --save

然后在Vue.js中引入Vuex:

import Vue from 'vue'
 Vuex from 'vuex'

Vue.use(Vuex)

使用方法

使用Vuex需要创建一个Vuex Store对象,并在Store对象中定义State、Getter、Mutation、Action等。例如,以下代码实现了一个简单的Vuex Store:

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

在上述代码中,定义了一个名为store的Vuex Store对象,并在Store对象中定义了State、GetterMutation、Action等。其中,state表示状态,getters表示获取器,mutations表示变更,actions表示动作。

示例1:使用Vuex现计数器

假设我们需要实现一个计数器,可以使用Vuex来实现。可以以下代码来实现计数器:

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

new Vue({
  el: '#app',
  store,
  template: `
    <div>
      <p>Count: {{ count }}</p>
      <button @click="increment">Increment</button>
      <button @click="decrement">Decrement</button>
    </div>
  `,
  computed: {
    count() {
      return this.$store.getters.getCount
    }
  },
  methods: {
    increment() {
      this.$store.dispatch('increment')
    },
    decrement() {
      this.$store.dispatch('decrement')
    }
  }
})

在上述代码中,使用Vuex实现了一个计数器,并在页面中展示计数器的值。可以点击按钮来增加或少计数器的值。

示例2:使用Vuex实现购物车

假设我们需要实现一个购物车,可以使用Vuex来实现。可以使用以下代码来实现购物车:

const store = new Vuex.Store({
  state: {
    cart: []
  },
  getters {
    getCart: state => state.cart,
    getTotalPrice: state => {
      return state.cart.reduce((total, item) => {
        return total + item.price * item.quantity
      }, 0)
    }
  },
  mutations: {
    addToCart(state, product) {
      const item = state.cart.find(item => item.id === product.id)
      if (item) {
        item.quantity++
      } else {
        state.cart.push({
          id: product.id,
          name: product.name,
          price: product.price,
          quantity: 1
        })
      }
    },
    removeFromCart(state, product) {
      const index = state.cart.findIndex(item => item.id === product.id)
      if (index !== -1) {
        const item = state.cart[index]
        if (item.quantity > 1) {
          item.quantity--
        } else {
          state.cart.splice(index, 1)
        }
      }
    }
  },
  actions: {
    addToCart(context, product) {
      context.commit('addToCart', product)
    },
    removeFromCart(context, product) {
      context.commit('removeFromCart', product)
    }
  }
})

new Vue({
  el: '#app',
  store,
  template: `
    <div>
      <ul>
        <li v-for="product in products" :key="product.id">
          {{ product.name }} - {{ product.price }}
          <button @click="addToCart(product)">Add to Cart</button>
        </li>
      </ul>
      <h2>Cart</h2>
      <ul>
        <li v-for="item in cart" :key="item.id">
          {{ item.name }} - {{ item.price }} x {{ item.quantity }}
          <button @click="removeFromCart(item)">Remove</button>
        </li>
      </ul>
      <p>Total Price: {{ totalPrice }}</p>
    </div>
  `,
  computed: {
    products() {
      return [
        { id: 1, name: 'Product 1',: 10 },
        { id: 2, name: 'Product 2', price: 20 },
        { id: 3, name: 'Product 3', price: 30 }
      ]
    },
    cart() {
      return this.$store.getters.getCart
    },
    totalPrice() {
      return this.$store.getters.getTotalPrice
    }
  },
  methods: {
    addToCart(product) {
      this.$store.dispatch('addToCart', product)
    },
    removeFromCart(product) {
      this.$store.dispatch('removeFromCart', product)
    }
  }
})

在上述代码中,使用Vuex实现了一个购物车,并在页面中展示商品列表和购物车列表。通过点击按钮来将商品添加到购物车或从购物车中移除商品。

总结

Vuex是Vue的状态管理库,用于管理应用程序中的状态。在本攻略中,我们介绍了Vuex的作用、核心概念、使用,并提供了两个示例说明,分别是使用Vuex实现计数器和使用Vuex实现购物车。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vuex学习总结 - Python技术站

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

相关文章

  • PHP 面向对象详解

    PHP 面向对象详解 什么是面向对象编程 面向对象编程 (OOP) 是一种编程范式,它将现实世界中的对象抽象为程序中的对象,并且对象间可以相互通信、相互协作,从而更好的解决复杂的编程问题。 面向对象编程的特点 封装性:将对象的属性和方法封装在一个类中,不被外部所访问,只能通过类提供的接口来进行访问。 继承性:子类能继承父类的属性和方法,并且能够在此基础上进行…

    other 2023年6月27日
    00
  • php中static 静态变量和普通变量的区别

    PHP中static静态变量和普通变量的区别 在PHP中,静态变量和普通变量是两种不同类型的变量。它们在作用域、生命周期和访问方式上有所不同。 作用域 普通变量:普通变量的作用域限定在其所在的函数或方法内部。它们只能在声明它们的函数或方法中访问。 静态变量:静态变量的作用域限定在声明它们的类或函数内部。它们可以在声明它们的类或函数内部以及类的所有实例中访问。…

    other 2023年7月29日
    00
  • java内存分布实现代码

    Java内存分布实现代码攻略 Java内存分布是指Java程序在运行时如何分配和管理内存。了解Java内存分布对于理解Java程序的性能和内存使用情况非常重要。下面是一个详细的攻略,介绍了Java内存分布的实现代码和示例。 1. Java内存分布概述 Java内存分布主要包括以下几个部分: 方法区(Method Area):用于存储类的信息、静态变量、常量等…

    other 2023年8月1日
    00
  • 腾讯对战平台自加载初始化失败怎么解决

    下面是解决腾讯对战平台自加载初始化失败的完整攻略: 问题描述 腾讯对战平台自加载初始化失败,出现以下报错信息: Failed to find model: prefabName 解决步骤 检查资源链接是否有效 这个错误信息一般是缺少资源导致的,需要检查资源链接是否有效。可以在网站的后台管理界面找到这个资源链接并尝试下载该资源,确认资源链接是否有效。 检查资源…

    other 2023年6月20日
    00
  • 清空npm缓存

    清空npm缓存 在使用npm时,有时会遇到诸如依赖版本冲突、安装失败等问题。这些问题有时是由于本地缓存的npm包出现问题所引起的。而清空npm缓存是解决这类问题的一种简单有效的方法。 如何清空npm缓存 清空npm缓存的方式很简单,只需要在命令行中输入以下命令即可: npm cache clean –force 这个命令会清空本地npm缓存的所以内容,并强…

    其他 2023年3月28日
    00
  • jQuery处理图片加载失败的常用方法

    处理图片加载失败是Web前端开发中的一个常见需求,常用的图片处理库之一就是jQuery。下面我为大家介绍一下jQuery处理图片加载失败的常用方法。 1. JQuery的onerror事件处理方式 JQuery提供了onerror事件用来处理图片加载失败的情况,代码如下: $(‘img’).on(‘error’,function(){ //图片加载失败后的操…

    other 2023年6月25日
    00
  • C语言指针教程示例详解

    标题:C语言指针教程示例详解 1. 简介 本篇文章将详细讲解C语言指针的用法和示例,适合初学者阅读。其中,将会包含两个实际的示例,帮助读者更好地理解C语言指针的使用和特性。 2. 基本概念 在C语言中,指针是一个保存内存地址的变量。它可以指向任何数据类型,包括整型、字符型、浮点型等类型。指针变量的值是一个地址,通过地址可以访问到内存中存储的数据。 3. 指针…

    other 2023年6月27日
    00
  • ios9系统提示未受信任的企业级开发者的解决办法

    iOS9系统提示未受信任的企业级开发者的解决办法 问题描述 在iOS9系统上,当用户安装企业级应用时,会出现一个提示 “未受信任的企业级开发者” 的弹窗,在解决该问题之前,无法安装企业级应用。 原因分析 该问题是由于在iOS9系统中引入了一个新的安全机制所致。Apple从iOS9开始强制执行了应用程序的二进制文件必须由苹果签名和批准的机制,即只有由苹果签名的…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部