Vuex的安装、搭建及案例详解

Vuex的安装

在使用Vuex之前,需要在项目中安装Vuex依赖包。可以通过npm或者yarn进行安装。

使用npm安装:

npm install vuex --save

使用yarn安装:

yarn add vuex

Vuex的搭建

Vuex的核心概念包括state、mutations、actions、getters和modules。

以下是一个简单的Vuex示例:

// 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++;
    }
  },
  actions: {
    increment(context) {
      context.commit('increment');
    }
  },
  getters: {
    getCount: state => {
      return state.count;
    }
  },
  modules: {}
});

export default store;
  1. 首先,在项目中引入Vue和Vuex。
  2. 然后,创建一个新的Vuex store实例。
  3. 在store实例中,定义state对象,用于存储状态。
  4. 定义mutations对象,用于修改state中的数据。
  5. 定义actions对象,用于异步修改state中的数据。在actions中,可以调用mutations中的方法。
  6. 定义getters用于获取state中的数据。getters可以理解为state的计算属性。
  7. 最后,创建一个空的modules对象。

案例详解

简单的计数器

下面我们来看一个简单的计数器的案例。假设我们有一个计数器,可以实现加1、减1和重置的功能。

首先,在Vuex的store中定义state对象,用于存储计数器的值:

state: {
  count: 0
}

然后,定义mutations对象,用于修改count的值:

mutations: {
  increment(state) {
    state.count++;
  },
  decrement(state) {
    state.count--;
  },
  reset(state) {
    state.count = 0;
  }
}

接着,定义actions对象,用于异步修改state中的数据:

actions: {
  increment(context) {
    context.commit('increment');
  },
  decrement(context) {
    context.commit('decrement');
  },
  reset(context) {
    context.commit('reset');
  }
}

最后,定义getters用于获取state中的数据:

getters: {
  getCount: state => {
    return state.count;
  }
}

在组件中使用Vuex时,需要引入Vuex的store实例。在Vue组件中,可以使用$store对象来访问Vuex store中的state、mutations、actions和getters等对象。

<template>
  <div>
    <h1>当前计数器的值为:{{count}}</h1>
    <button @click="increment">加1</button>
    <button @click="decrement">减1</button>
    <button @click="reset">重置</button>
  </div>
</template>

<script>
export default {
  computed: {
    count() {
      return this.$store.getters.getCount;
    }
  },
  methods: {
    increment() {
      this.$store.dispatch('increment');
    },
    decrement() {
      this.$store.dispatch('decrement');
    },
    reset() {
      this.$store.dispatch('reset');
    }
  }
}
</script>

上面的代码中,我们使用了computed来计算count值,使用methods来触发actions中的方法。在methods中,使用this.$store.dispatch来调用actions中的方法。

购物车

在Vue.js中,用Vuex实现购物车的功能非常方便。下面我们来看一个购物车的示例。

首先,在Vuex的store中定义state对象,用于存储购物车的商品信息:

state: {
  cartList: []
}

然后,定义mutations对象,用于修改state中的购物车信息:

mutations: {
  addCartItem(state, item) {
    let index = state.cartList.findIndex(cartItem => {
      return cartItem.id === item.id;
    })
    if (index !== -1) {
      state.cartList[index].count++;
    } else {
      state.cartList.push(Object.assign(item, { count: 1 }));
    }
  },
  removeCartItem(state, item) {
    let index = state.cartList.findIndex(cartItem => {
      return cartItem.id === item.id;
    })
    state.cartList.splice(index, 1);
  },
  clearCart(state) {
    state.cartList = [];
  }
}

接着,定义actions对象,用于异步修改state中的购物车信息:

actions: {
  addCartItem(context, item) {
    context.commit('addCartItem', item);
  },
  removeCartItem(context, item) {
    context.commit('removeCartItem', item);
  },
  clearCart(context) {
    context.commit('clearCart');
  }
}

最后,定义getters用于获取state中的购物车信息:

getters: {
  getCartList: state => {
    return state.cartList;
  },
  getTotalPrice: state => {
    return state.cartList.reduce((total, item) => {
      return total + item.count * item.price;
    }, 0);
  },
  getTotalCount: state => {
    return state.cartList.reduce((total, item) => {
      return total + item.count;
    }, 0);
  }
}

在组件中使用Vuex来实现购物车的功能。

<template>
  <div>
    <ul>
      <li v-for="item in cartList" :key="item.id">
        <span>{{item.name}}</span>
        <span>{{item.price}}</span>
        <span>{{item.count}}</span>
        <button @click="addCartItem(item)">添加</button>
        <button @click="removeCartItem(item)">删除</button>
      </li>
    </ul>
    <div>
      <p v-if="cartList.length > 0">购物车总价:{{totalPrice}}</p>
      <p v-if="cartList.length > 0">购物车总数:{{totalCount}}</p>
      <button @click="clearCart">清空购物车</button>
    </div>
  </div>
</template>

<script>
export default {
  computed: {
    cartList() {
      return this.$store.getters.getCartList;
    },
    totalPrice() {
      return this.$store.getters.getTotalPrice;
    },
    totalCount() {
      return this.$store.getters.getTotalCount;
    }
  },
  methods: {
    addCartItem(item) {
      this.$store.dispatch('addCartItem', item);
    },
    removeCartItem(item) {
      this.$store.dispatch('removeCartItem', item);
    },
    clearCart() {
      this.$store.dispatch('clearCart');
    }
  }
}
</script>

上面的代码中,我们使用了computed来计算cartList、totalPrice和totalCount值,使用methods来触发actions中的方法。在methods中,使用this.$store.dispatch来调用actions中的方法。

以上就是Vuex的安装、搭建及案例详解的完整攻略。希望能对你的学习有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vuex的安装、搭建及案例详解 - Python技术站

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

相关文章

  • Vue使用electron生成桌面应用过程详解

    Vue使用electron生成桌面应用过程详解 1. 概述 Vue.js是一个流行的JavaScript框架,用于构建Web应用程序。而Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的工具包。将Vue.js与Electron结合使用,可以快速而简单地构建更为强大的桌面应用程序。 本文将介绍如何使用Vue.js和Elec…

    Vue 2023年5月27日
    00
  • Vue分析同步和异步有什么区别

    Vue分析同步和异步的区别是一个非常重要的概念,在我们设计和开发Vue应用程序的过程中需要非常清楚。本篇攻略将详细讲解Vue中同步和异步的概念,并通过两个示例说明它们之间的区别。 什么是同步和异步? 在JavaScript中,同步和异步是指代码执行的方式。同步代码按顺序执行,也就是说当一个函数被调用时,代码会等待函数内部所有的操作完成后,才会执行下一个代码块…

    Vue 2023年5月27日
    00
  • Vue中函数防抖节流的理解及应用实现

    Vue中函数防抖节流的理解及应用实现 在Vue中,函数防抖(debounce)和函数节流(throttle)是常用的一些技巧。 函数防抖(Debounce) 基本概念 在前端开发中,有些事件会频繁地触发,如窗口大小的改变、搜索框的输入等等。如果我们在这类事件的回调函数中添加一些比较耗时的操作,就会影响页面的性能和用户体验。 函数防抖的原理是,在事件被触发n秒…

    Vue 2023年5月28日
    00
  • Vue 获取数组键名的方法

    Vue 获取数组键名的方法主要有两种,分别是使用v-for循环数组时获取索引值与使用Object.keys()方法获取数组键名。 使用v-for获取数组索引值 在使用v-for循环渲染数组时可以通过指定两个参数来获取数组中每个元素的值和对应的索引值,通过获取索引值就可以获取数组的键名。示例代码如下: <ul> <li v-for=&quot…

    Vue 2023年5月28日
    00
  • 详解Vue2.X的路由管理记录之 钩子函数(切割流水线)

    标题:详解Vue2.X的路由管理记录之钩子函数(切割流水线) Vue.js是一个流行的JavaScript框架,它提供了很多功能,其中一个最重要的功能是路由管理。Vue Router是Vue.js官方提供的路由管理器。在Vue Router中,钩子函数是一个可以帮助我们控制路由导航状态的强大工具。在本文中,我们将详细讲解Vue2.X中的路由钩子函数及其用法,…

    Vue 2023年5月28日
    00
  • vue之将echart封装为组件

    封装echarts为Vue组件并不难,只需要遵循以下步骤即可。 步骤1:安装echarts和vue-echarts 使用npm安装echarts和vue-echarts依赖: npm install echarts vue-echarts –save 步骤2:创建一个Echarts.vue组件 在src/components目录下创建一个Echarts.v…

    Vue 2023年5月28日
    00
  • Vue导出json数据到Excel电子表格的示例

    下面是“Vue导出json数据到Excel电子表格的示例”的完整攻略: 1. 准备工作 在使用Vue导出json数据到Excel电子表格之前,我们需要先引入几个依赖库: SheetJS :用于将JSON数据转换为Excel电子表格格式。 file-saver :用于将电子表格保存到本地文件系统。 我们可以通过npm安装: npm install xlsx f…

    Vue 2023年5月27日
    00
  • 加快Vue项目的开发速度的方法

    下面是关于加快Vue项目开发速度的方法的完整攻略: 加快Vue项目开发速度的方法 1. 使用Vue CLI来快速创建项目 Vue CLI是Vue官方提供的脚手架工具,可以快速搭建一个Vue项目的基础结构。使用Vue CLI可以大大降低我们的开发时间和成本。按照以下步骤使用Vue CLI: 安装Vue CLI npm install -g @vue/cli 创…

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