vue中使用vuex的超详细教程

下面是关于vue中使用vuex的超详细教程,内容主要包括以下几个部分:

  1. vuex在vue中的作用及基本概念
  2. 在vue中引入vuex
  3. 构建vuex的基本结构
  4. 如何引用vuex中的数据和方法
  5. 示例说明
  6. 总结

1. vuex在vue中的作用及基本概念

vuex是一种状态管理模式,用于管理vue应用中的所有组件的状态,将数据交给vuex中心化管理,实现全局统一的数据管理,避免数据流的混乱和重复、无序的数据操作。

vuex包含以下几个概念:

  • State:存放应用中各个组件的状态数据
  • Getter:从State中获取派生状态
  • Mutation:更改State中的状态
  • Action:异步操作或基于Mutation的组合操作,通过commit提交Mutation
  • Module:将包含State、Getter、Mutation、Action等概念的模块拆分,分治处理复杂的应用

2. 在vue中引入vuex

在vue应用中使用vuex,首先需要通过npm或cdn方式引入vuex库,然后再在vue的入口文件main.js中引入vuex库,如下:

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

Vue.use(Vuex)

3. 构建vuex的基本结构

在使用vuex之前,需要定义State、Getter、Mutation、Action等概念,然后生成store对象,代码如下:

const store = new Vuex.Store({
  state: {
    // 数据存储对象,存放vuex state数据,由getter、mutation修改
  },
  getters: {
    // 从state中派生出新的状态,供多个组件使用
  },
  mutations: {
    // 修改state中的数据
  },
  actions: {
    // 配置异步操作和组合操作,触发mutation修改store
  },
  modules: {
    // 将store拆分,将多个模块分别处理,便于维护
  }
})

4. 如何引用vuex中的数据和方法

在vue组件中引用vuex中的数据和方法,需要先在组件中导入vuex的store对象,然后通过计算属性或者方法获取store中的状态和方法,代码如下:

import { mapState, mapGetters, mapActions } from 'vuex'

export default {
  computed: {
    ...mapState({
      // 仅仅声明需要映射的属性,即可直接通过this.属性名调用
    }),

    ...mapGetters([
      // 将getter的函数名抽象成单个对象属性,直接调用即可
    ])
  },

  methods: {
    ...mapActions([
      // 将actions的函数名抽象成单个对象属性,通过this.属性名触发相应的函数
    ])
  }
}

5. 示例说明

下面通过两个示例说明vuex在vue应用中的使用方法:

示例一:购物车案例的vuex实现

// store.js
const store = new Vuex.Store({
  state: {
    cartList: []
  },

  mutations: {
    // 添加商品到购物车
    addCart(state, product) {
      const isExist = state.cartList.find(item => item.id === product.id)

      if (isExist) {
        isExist.count += 1
      } else {
        product.count = 1
        state.cartList.push(product)
      }
    },

    // 修改商品的数量
    changeCount(state, payload) {
      const {id, count} = payload
      const product = state.cartList.find(item => item.id === id)

      product.count = count
    }
  },

  getters: {
    // 获取购物车的商品总数量
    getTotalCount(state) {
      return state.cartList.reduce((count, item) => count + item.count, 0)
    }
  }
})

// Cart.vue
<template>
  <div>
    <div>购物车总数量:{{totalCount}}</div>
    <ul>
      <li v-for="(item, index) in cartList" :key="item.id">
        <div>{{item.name}}</div>
        <div>
          <button @click="handleChangeCount(item.id, item.count - 1)">-</button>
          <div>{{item.count}}</div>
          <button @click="handleChangeCount(item.id, item.count + 1)">+</button>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapState(['cartList']),
    ...mapGetters(['getTotalCount'])
  },

  methods: {
    ...mapMutations(['changeCount']),
    handleChangeCount(id, count) {
      // 触发Mutation,修改store的状态
      this.changeCount({id, count})
    }
  }
}
</script>

示例二:异步操作的vuex实现

// store.js
const store = new Vuex.Store({
  state: {
    userList: []
  },

  mutations: {
    // 更新用户列表数据
    updateUserList(state, userList) {
      state.userList = userList
    }
  },

  actions: {
    // 异步请求用户列表数据
    fetchUserList({commit}) {
      axios.get('/api/user/list')
        .then(res => {
          commit('updateUserList', res.data)
        })
    }
  }
})

// UserList.vue
<template>
  <div>
    <button @click="handleFetchUserList">获取用户列表</button>
    <ul>
      <li v-for="(item, index) in userList" :key="item.id">
        <div>{{item.name}}</div>
        <div>{{item.age}}</div>
        <div>{{item.address}}</div>
      </li>
    </ul>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex'

export default {
  computed: {
    ...mapState(['userList'])
  },

  methods: {
    ...mapActions(['fetchUserList']),
    handleFetchUserList() {
      // 触发Action,提交异步请求,更新store
      this.fetchUserList()
    }
  }
}
</script>

6. 总结

通过以上示例的演示,我们可以清楚地了解到vuex在vue应用中的基本使用方法,以及核心的State、Getter、Mutation、Action概念的含义及用法。当然,在实际的开发中,vuex还有很多高级用法和技巧,需要结合实际问题的具体场景来深入学习和了解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中使用vuex的超详细教程 - Python技术站

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

相关文章

  • vue前端重构computed及watch组件通信等实用技巧整理

    Vue前端重构:computed及watch组件通信等实用技巧整理 前言 在Vue的开发过程中,我们时常需要对一些复杂的数据进行计算和转换,而Vue提供的computed属性能够很好地满足我们这方面的需求。此外,Vue还提供了watch属性来监控特定的数据变化。本文主要介绍computed及watch的使用方法和相关实用技巧。 computed属性的使用 c…

    Vue 2023年5月28日
    00
  • Vuex总体案例详解

    Vuex总体案例详解 Vuex是Vue.js的状态管理模式,它集中管理组件的状态变化,并提供了一些方法让组件能够修改和访问状态。在这里,我们将讨论一个Vuex的完整案例,具体的实现细节和代码示例。 步骤1:安装Vuex 如果你想在一个Vue.js应用中使用Vuex,你需要先安装它。可以通过npm进行安装,在命令行中输入以下代码: npm install vu…

    Vue 2023年5月27日
    00
  • Vue中的v-cloak使用解读

    当使用Vue.js进行开发时,可能会出现一种情况:在 Vue.js 的编译过程中,由于使用了某些具有 v- 前缀的指令,例如v-if、v-for等,在渲染 HTML 界面的时候,页面会显示出这些指令,而此时还没有完成Vue实例的挂载。 为了解决这个问题,Vue.js提供了一种指令:v-cloak。该指令在 Vue.js 实例挂载之前会一直存在于对应的 HTM…

    Vue 2023年5月28日
    00
  • vue发送websocket请求和http post请求的实例代码

    我来帮你讲解一下。 发送websocket请求 在Vue中,我们可以使用vue-websocket库来实现对Websocket的使用。首先,在项目中安装vue-websocket库: npm install vue-websocket –save 接下来,在Vue实例中,我们需要使用mixins来引入websocket相关配置,并且在钩子函数中绑定事件和发…

    Vue 2023年5月28日
    00
  • Vue项目中接口调用的详细讲解

    下面是“Vue项目中接口调用的详细讲解”的完整攻略。 Vue项目中接口调用的详细讲解 在Vue项目中使用接口调用是一个非常常见的需求。下面将详细讲解如何在Vue项目中进行接口调用。 1、安装axios 在Vue中使用axios进行接口调用需要先安装axios,可以通过npm安装。在终端中输入以下命令: npm install axios –save 安装完…

    Vue 2023年5月28日
    00
  • JavaScript实现的圆形浮动标签云效果实例

    下面是实现“JavaScript实现的圆形浮动标签云效果实例”的完整攻略: 1. 实现思路 要实现圆形浮动标签云效果,我们需要根据标签数量生成标签,并随机赋予标签位置和颜色等属性,随着页面滚动,标签应该在页面中随机漂浮。实现的大致思路如下: 准备标签数据; 创建标签元素,设置属性和样式; 随机位置和颜色等属性; 将标签添加到页面中; 定时器控制标签漂浮效果。…

    Vue 2023年5月29日
    00
  • 在项目中封装axios的实战过程

    在项目中封装axios能够使代码更加简洁易读,并且可以统一管理请求接口、请求头等信息,提高代码的可维护性和可拓展性。下面是封装axios的完整攻略: 步骤一:安装axios并创建实例 首先需要在项目中安装axios依赖包,通过npm仓库下载、或者使用CDN链接在html文件中引入。 安装命令:npm install axios 接着,我们需要在项目中创建一个…

    Vue 2023年5月28日
    00
  • vue中的循环遍历对象、数组和字符串

    下面是关于vue中循环遍历对象、数组和字符串的详细攻略。 对象循环遍历 在vue中循环遍历对象可以使用v-for指令,与循环遍历数组类似。下面是一个简单的例子: <ul> <li v-for="(value, key) in obj">{{ key }}: {{ value }}</li> </u…

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