Vue 搭建Vuex环境详解

yizhihongxing

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日

相关文章

  • el-form-renderer使用教程

    El Form Renderer 使用教程 简介 el-form-renderer 是一款基于 ElementUI 组件库的渲染器,可以根据配置动态生成表单。本文将详细讲解如何使用 el-form-renderer。 安装 可以通过 npm 或 yarn 进行安装: npm install el-form-renderer –save yarn add e…

    Vue 2023年5月28日
    00
  • JS实现点击链接切换显示隐藏内容的方法

    当我们需要将网页中的内容显示和隐藏时,我们可以使用JavaScript来实现。具体的实现方式有多种,下面是两种使用JS实现点击链接切换显示隐藏内容的方法: 一、使用display属性 为需要隐藏或显示的内容添加一个id属性 <p id="content1">这是需要显示和隐藏的内容</p> 在CSS中设置默认样式 …

    Vue 2023年5月28日
    00
  • 详解vue2.0 资源文件assets和static的区别

    来讲解一下“详解vue2.0 资源文件assets和static的区别”。 什么是资源文件 在前端开发中,想要像引用图片、字体、json数据等资源文件,需要将这些文件放入到项目中的某个目录下,然后才能够在代码中进行使用。 assets和static的区别 在Vue2.0中,我们可以把资源文件放置在两个目录下:assets和static。它们之间的区别在于: …

    Vue 2023年5月27日
    00
  • 详解Vue-Router的安装与使用

    下面就是“详解Vue-Router的安装与使用”的完整攻略。 1. 什么是Vue-Router Vue-Router是Vue.js官方推荐的路由管理库,它能够方便地管理Vue.js应用程序中的导航和路由。 路由(Routing)是指根据不同的URL地址展现不同的内容或页面。通过Vue-Router,我们能够实现在单页应用中切换不同的页面而不用刷新整个页面。 …

    Vue 2023年5月27日
    00
  • Vue生命周期中的八个钩子函数相机

    Vue生命周期中的八个钩子函数是Vue组件在创建、挂载、更新、销毁过程中执行的钩子函数。这些钩子函数在Vue组件中起到了重要的作用,以便开发者在这些组件生命周期的不同时期进行不同的操作。这八个钩子函数分别是: beforeCreate:在Vue实例被创建后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 cre…

    Vue 2023年5月28日
    00
  • 使用Vite2+Vue3渲染Markdown文档的方法实践

    使用Vite2+Vue3渲染Markdown文档的方法实践,可以按照以下步骤进行: 准备工作 安装Node.js,下载地址:https://nodejs.org/en/download/。 在终端中执行以下命令安装Vite:npm install -g vite。 创建一个新的Vue3项目:npm init vite@latest project-name …

    Vue 2023年5月28日
    00
  • vue踩坑记录之数组定义和赋值问题

    首先,我需要说明一下本文讨论的vue版本是Vue 2。 一、问题描述:在vue中,我们经常要定义和操作数组。但是,在定义和赋值数组时,可能会遇到某些坑点。主要包括以下两点: 1、不能直接使用数组的方式为data中的数组元素赋值。2、在组件内部定义的数组会被所有组件共享。 下面,我们针对这两个坑点进行分别说明。 二、问题解决: 1、不能直接使用数组的方式为da…

    Vue 2023年5月28日
    00
  • Vue的data、computed、watch源码浅谈

    Vue的data、computed、watch源码浅谈 Vue.js是一个开源的前端框架,它实现了数据绑定和组件化的开发模式。在Vue.js中,数据存储在data对象中,并通过数据绑定的方式实现数据响应式更新。此外,Vue.js还实现了computed和watch功能,用于处理数据的计算和监听。 在Vue.js的源码中,data、computed、watch…

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