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入门之数量加减运算操作示例

    那我就来详细地讲一下“Vue入门之数量加减运算操作示例”的完整攻略。 一、前置知识 在学习Vue的运算操作之前,需要先掌握一些基本的前置知识: HTML 和 CSS的基础语法:Vue是一种基于HTML和CSS的框架,因此需要熟练掌握HTML和CSS的基本语法。 JavaScript 基础:Vue是通过JavaScript实现的,所以需要熟练掌握JavaScr…

    Vue 2023年5月27日
    00
  • Vue CLI 3.x 自动部署项目至服务器的方法

    这里我为大家讲解如何使用Vue CLI 3.x自动部署项目至服务器的详细步骤。 什么是Vue CLI 3.x自动部署? Vue CLI 3.x自动部署是指通过Vue CLI 3.x提供的自动化工具,将项目自动部署到远程服务器上。使用起来相当方便快捷,可以极大地提高团队的开发效率。 准备工作 在使用Vue CLI 3.x自动部署功能之前,需要先安装好以下软件:…

    Vue 2023年5月28日
    00
  • vue 实现删除对象的元素 delete

    要在Vue中实现删除对象的元素delete,可以根据以下步骤进行: 1. 在Vue实例中定义一个对象 定义一个Vue实例中的对象,其中包含了需要进行删除的属性。例如: var vm = new Vue({ data: { items: [ { id: 1, name: ‘item1’ }, { id: 2, name: ‘item2’ }, { id: 3,…

    Vue 2023年5月28日
    00
  • Vue组件与Vue cli脚手架安装方法超详细讲解

    下面是详细讲解“Vue组件与Vue cli脚手架安装方法超详细讲解”的完整攻略。 Vue组件与Vue cli脚手架安装方法超详细讲解 什么是Vue组件 Vue组件是构成Vue应用的基础,Vue应用中所有的元素都是由Vue组件构成的。组件可以是页面上的一个功能块,也可以是多个功能块的集合。 如何创建Vue组件 创建Vue组件的方式有两种,一种是使用Vue.js…

    Vue 2023年5月28日
    00
  • vue 动态表单开发方法案例详解

    Vue 动态表单开发方法案例详解 什么是动态表单? 动态表单是指可以根据不同的需求动态生成不同的表单。在前端开发中,我们通常使用 Vue 来实现动态表单的开发。 开发步骤 1. 定义数据格式 在 Vue 中定义动态表单的数据格式非常重要,因为这将决定你的表单如何渲染和交互。通常使用 JSON 或者 JavaScript 对象来存储表单数据。 2. 构建表单模…

    Vue 2023年5月27日
    00
  • 浅析vue中的provide / inject 有什么用处

    提供/注入(Provide / Inject)是Vue.js中的一个高级特性,允许祖先组件通过一个透明的接口向后代组件注入依赖项。在这个过程中,依赖注入是通过一个专用的上下文对象进行的。这种上下文对象作为依赖被传递到了需要访问依赖的子组件中。本攻略将介绍Vue中provide/inject的用处、使用方法以及示例说明。 使用方法 在祖先组件中,使用provi…

    Vue 2023年5月29日
    00
  • Vue extend学习示例讲解

    关于Vue的extend方法,它可以让我们扩展一个Vue组件,方便我们在开发中复用组件,并且可以轻松自定义组件的一些属性和方法。 下面我将详细讲解Vue extend的使用方法,以及一些代码示例。 Vue.extend方法详解 在Vue的官方文档中,Vue.extend是这么定义的: Vue.extend(options) options参数说明: “dat…

    Vue 2023年5月28日
    00
  • vue3中hooks的简介及用法教程

    下面是关于vue3中hooks的详细讲解及用法教程。 什么是hooks? 在Vue3中,引入了一种新的特性——hooks(钩子函数)。Hooks可以让我们在函数组件中使用state和其他React特性,而不需要使用类组件。与Vue2中options-API不同的是,hooks是基于函数式编程的,它通过函数的方式提供了组件内状态的维护和实现状态的逻辑复用。 h…

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