Vue 搭建Vuex环境详解

Vue 搭建Vuex环境详解

简介

Vuex是Vue.js的官方状态管理库,它可以更好的管理Vue.js应用中的数据流,包括数据的状态、存储和同步。社区中已经有很多文章介绍Vuex的基础使用,本文将详细讲解如何在Vue.js中搭建Vuex环境,并提供两个示例说明。

搭建Vuex环境

  1. 安装Vuex

在Vue.js项目中使用Vuex,需要先安装它。

npm install vuex --save
  1. 创建store.js文件

在项目的根目录中创建一个store.js文件,用来存储store。Vuex的store是一个对象,它集中管理应用的状态。

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  // 这里存放状态
  state: {},
  // 更改状态的方法
  mutations: {},
  // 分发action的方法
  actions: {},
  // 获取状态的方法
  getters: {}
});

export default store;
  1. 在main.js中引入store.js

在创建Vue实例之前,在main.js中引入store.js,并将store注入到Vue实例中。

import Vue from 'vue';
import store from './store';

new Vue({
  el: '#app',
  store,
  render: h => h(App)
});

示例说明

示例一:计数器

以下代码展示了一个简单的计数器示例,通过Vuex的store管理计数器的状态和变化。用户点击加号或减号按钮时,会触发dispatch方法,dispatch方法会调用actions中的inc或dec方法,最终通过mutations改变状态。

// store.js

const store = new Vuex.Store({
  // 状态
  state: {
    count: 0
  },
  // 改变状态的方法
  mutations: {
    inc(state) {
      state.count++;
    },
    dec(state) {
      state.count--;
    }
  },
  // 分发action的方法
  actions: {
    inc: ({ commit }) => commit('inc'),
    dec: ({ commit }) => commit('dec')
  },
  // 获取状态的方法
  getters: {
    count: state => state.count
  }
});

export default store;
// counter.vue

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="inc">+</button>
    <button @click="dec">-</button>
  </div>
</template>

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

export default {
  // 映射count状态和方法到组件
  computed: {
    ...mapGetters([
      'count'
    ])
  },
  methods: {
    ...mapActions([
      'inc',
      'dec'
    ])
  }
};
</script>

示例二:购物车

以下代码展示了一个简单的购物车示例,用户可以添加商品到购物车并查看购物车中的商品和总价。购物车状态的管理由Vuex的store完成。

// store.js

const store = new Vuex.Store({
  // 状态
  state: {
    cart: []
  },
  // 改变状态的方法
  mutations: {
    addToCart(state, product) {
      const p = state.cart.find(p => p.id === product.id);
      if (p) {
        p.count++;
      } else {
        state.cart.push({ ...product, count: 1 });
      }
    },
    removeFromCart(state, product) {
      const index = state.cart.findIndex(p => p.id === product.id);
      if (index !== -1) {
        state.cart.splice(index, 1);
      }
    }
  },
  // 分发action的方法
  actions: {
    addToCart({ commit }, product) {
      commit('addToCart', product);
    },
    removeFromCart({ commit }, product) {
      commit('removeFromCart', product);
    }
  },
  // 获取状态的方法
  getters: {
    cart: state => state.cart,
    totalPrice: state => state.cart.reduce((total, p) => total + p.price * p.count, 0)
  }
});

export default store;
// products.vue

<template>
  <div>
    <ul>
      <li v-for="p in products" :key="p.id">
        {{ p.name }} - {{ p.price }}
        <button @click="addToCart(p)">添加到购物车</button>
      </li>
    </ul>
  </div>
</template>

<script>
import { mapActions } from 'vuex';

export default {
  data() {
    return {
      products: [
        {
          id: 1,
          name: '商品1',
          price: 10
        },
        {
          id: 2,
          name: '商品2',
          price: 20
        },
        {
          id: 3,
          name: '商品3',
          price: 30
        }
      ]
    };
  },
  methods: {
    ...mapActions([
      'addToCart'
    ])
  }
};
</script>
// cart.vue

<template>
  <div>
    <ul>
      <li v-for="p in cart" :key="p.id">
        {{ p.name }} x {{ p.count }}
        <button @click="removeFromCart(p)">删除</button>
      </li>
    </ul>
    <p>总价:{{ totalPrice }}</p>
  </div>
</template>

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

export default {
  computed: {
    ...mapGetters([
      'cart',
      'totalPrice'
    ])
  },
  methods: {
    ...mapActions([
      'removeFromCart'
    ])
  }
};
</script>

以上两个示例均展示了Vuex的用法,开发者可以根据自身项目需求进行选择,进行状态的统一管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue 搭建Vuex环境详解 - Python技术站

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

相关文章

  • vue 实现列表跳转至详情且能添加至购物车功能

    下面是“vue 实现列表跳转至详情且能添加至购物车功能”的攻略。该攻略的主要步骤如下: 构建商品列表页 构建商品详情页 实现跳转及传参功能 实现购物车功能 下面将详细介绍这些步骤。 构建商品列表页 首先需要构建一个商品列表页面,用于展示商品列表及其相关信息。可以使用v-for指令循环遍历商品数组,并通过router-link标签实现跳转到商品详情页。示例代码…

    Vue 2023年5月27日
    00
  • vue中实现当前时间echarts图表时间轴动态的数据(实例代码)

    下面为您详细讲解vue中实现当前时间echarts图表时间轴动态的数据的完整攻略: 1. 确认需求 首先我们需要明确需求:在echarts的时间轴中,通过动态的数据来展示当前时间的图表数据。因此我们需要掌握以下的知识点: Echarts的时间轴相关配置 Vue中通过生命周期函数获取当前时间,并将时间作为图表数据的X轴 2. 确定技术栈 在实现这个需求时,我们…

    Vue 2023年5月29日
    00
  • 在 Vue.js中优雅地使用全局事件的方法

    在 Vue.js 中,全局事件可以在不同组件之间传递信息。但是如果使用不合适,会导致代码变得混乱和难以维护。下面让我们看一下如何优雅地使用 Vue.js 中的全局事件。 什么是全局事件 在 Vue.js 中,我们可以使用自定义事件系统来在不同组件之间传递信息。在根组件中使用 $emit 方法触发自定义事件,在其他组件中使用 $on 监听自定义事件。 全局事件…

    Vue 2023年5月28日
    00
  • vue动画—通过钩子函数实现半场动画操作

    下面我将详细讲解如何通过钩子函数实现 Vue 动画操作的完整攻略。 1. 前置知识 在学习 Vue 动画之前,需要掌握以下基础知识: Vue 的基本使用方法,包括组件、指令等。 Vue 的渲染函数,了解如何通过 render 函数来创建 Vue 组件。 Vue 中的过渡效果,了解如何使用 transition 组件实现动画效果。 2. 动画钩子函数 Vue …

    Vue 2023年5月28日
    00
  • 用vuex写了一个购物车H5页面的示例代码

    下面就是使用Vuex写购物车H5页面的攻略,具体步骤如下: 1. 安装所需依赖 首先,在终端中切换到你的项目目录下,使用以下命令安装所需依赖: npm install vuex –save-dev 2. 创建Vuex store 在src目录下创建store目录,并在其中创建index.js文件。在index.js文件中,先引入Vue和Vuex: impo…

    Vue 2023年5月27日
    00
  • vue如何从后台下载.zip压缩包文件

    从后台下载.zip压缩包文件可以用Vue.js通过axios进行异步请求和下载。以下是详细的步骤: 在Vue.js的项目中安装axios: $ npm install axios –save 在需要进行请求和下载的组件中导入axios: import axios from ‘axios’; 在需要进行请求和下载的方法中,使用axios来发送请求。对于后台返…

    Vue 2023年5月28日
    00
  • VUE3+TS递归组件实现TreeList设计实例详解

    让我详细讲解一下“VUE3+TS递归组件实现TreeList设计实例详解”的完整攻略。 1. TreeList设计概述 TreeList 是一种常见的树状结构列表,它通常用于展示带有层级关系的数据,比如公司部门结构。本文将详细介绍如何使用 VUE3 和 TypeScript 实现一个高效的递归组件,来实现 TreeList 设计。 2. 实现步骤 2.1 V…

    Vue 2023年5月29日
    00
  • vue的事件绑定与方法详解

    下面是关于“vue的事件绑定与方法详解”的完整攻略。 什么是Vue事件绑定? 在Vue应用程序中,事件绑定用于监听DOM元素上的事件,以响应用户的交互操作。当用户对指定的DOM元素进行操作时,Vue会自动检测DOM事件,并触发指定的Vue方法。 事件绑定语法: <button v-on:click="doSomething">…

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