vue3.2中的vuex使用详解

下面是关于vue3.2中的vuex使用详解的完整攻略。

1. 什么是Vuex

Vuex是Vue.js应用程序的状态管理模式。它通过一个集中的存储管理所有组件的状态,并以相应的规则保证状态以可预测的方式发生变化。

2. 如何使用Vuex

2.1 安装Vuex

在vue项目中使用Vuex,需要先安装Vuex。使用npm安装:

npm install vuex --save

2.2 Vue中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {...},
  mutations: {...},
  actions: {...},
  getters: {...}
})

export default store

其中,state表示存储的状态值,mutations表示提交对状态的更改,actions表示异步操作,getters表示从state中派生出一些状态。

2.3 在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

2.3.1 mapState使用示例

mapState函数可以直接将Vuex的state映射到组件的计算属性中。

import {mapState} from 'vuex'

export default {
  // ...
  computed: {
    ...mapState({
      count: state => state.count
    })
  }
}

2.3.2 mapMutations使用示例

mapMutations函数可以将Vuex的mutations映射到组件的methods中。

import {mapMutations} from 'vuex'

export default {
  // ...
  methods: {
    ...mapMutations([
      'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`
      'decrement' // 将 `this.decrement()` 映射为 `this.$store.commit('decrement')`
    ])
  }
}

2.3.3 mapActions使用示例

mapActions函数可以将Vuex的actions映射到组件的methods中。

import {mapActions} from 'vuex'

export default {
  // ...
  methods: {
    ...mapActions([
      'incrementAsync', // 将 `this.incrementAsync()` 映射为 `this.$store.dispatch('incrementAsync')`
      'decrementAsync' // 将 `this.decrementAsync()` 映射为 `this.$store.dispatch('decrementAsync')`
    ])
  }
}

2.3.4 mapGetters使用示例

mapGetters函数可以将Vuex的getters映射到组件的计算属性中。

import {mapGetters} from 'vuex'

export default {
  // ...
  computed: {
    ...mapGetters([
      'doneTodosCount'
    ])
  }
}

3. 示例说明

3.1 示例一

下面是一个简单的示例,说明如何在Vuex中管理计数器的状态。

安装Vuex

使用npm安装Vuex:

npm install vuex

在Vue项目中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  },
  actions: {
    incrementAsync({commit}) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    },
    decrementAsync({commit}) {
      setTimeout(() => {
        commit('decrement')
      }, 1000)
    }
  },
  getters: {
    doneTodosCount: state => {
      return state.count
    }
  }
})

export default store

在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

<template>
  <div>
    <span>{{count}}</span>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapState({
      count: state => state.count
    }),
    ...mapGetters([
      'doneTodosCount'
    ])
  },
  methods: {
    ...mapMutations([
      'increment',
      'decrement'
    ]),
    ...mapActions([
      'incrementAsync',
      'decrementAsync'
    ])
  }
}
</script>

3.2 示例二

下面是另一个示例,说明如何在Vuex中管理购物车的状态。

安装Vuex

使用npm安装Vuex:

npm install vuex

在Vue项目中使用Vuex

在Vue项目中,需要先引入Vuex,并将其挂载到Vue中。

import {createStore} from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = createStore({
  state: {
    cart: []
  },
  mutations: {
    addToCart(state, product) {
      const item = state.cart.find(i => i.id === product.id)
      if (item) {
        item.quantity++
      } else {
        state.cart.push({...product, quantity: 1})
      }
    }
  },
  actions: {},
  getters: {
    cartCount: state => {
      return state.cart.reduce((count, item) => count + item.quantity, 0)
    }
  }
})

export default store

在组件中使用Vuex

在组件中使用Vuex,需要使用Vue提供的mapStatemapMutationsmapActionsmapGetters四个辅助函数进行状态管理。

<template>
  <div>
    <h2>购物车</h2>
    <p>商品数量:{{cartCount}}</p>
    <ul>
      <li v-for="item in cart" :key="item.id">{{item.name}} * {{item.quantity}}</li>
    </ul>
    <button @click="addToCart({id: 1, name: '商品1', price: 100})">加入购物车</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapState({
      cart: state => state.cart
    }),
    ...mapGetters([
      'cartCount'
    ])
  },
  methods: {
    ...mapMutations([
      'addToCart'
    ]),
    ...mapActions([
    ])
  }
}
</script>

以上就是关于vue3.2中的vuex使用详解的完整攻略以及两个示例的详细说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3.2中的vuex使用详解 - Python技术站

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

相关文章

  • vue中axios封装使用的完整教程

    下面我将详细讲解一下“vue中axios封装使用的完整教程”。 一、什么是axios axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 上,这个库可以结合 Vue.js 实现 AJAX 请求。 二、axios的安装和引入 使用 axios 首先我们需要安装它: npm install axios 然后我们在需要使用的…

    Vue 2023年5月28日
    00
  • vuex中Getter的用法详解

    Vuex中Getter的用法详解 Vuex是Vue.js中使用的状态管理模式。它建立在Vue.js的基础上,提供了中央数据存储库,使得组件之间共享状态变得非常容易。 getter是Vuex中获取状态的一种方法,它可以访问状态的属性并进行某些计算。本篇文章将详细讲解getter的用法。 Getter的定义 在Vuex中使用getter可以获取状态的值并进行计算…

    Vue 2023年5月28日
    00
  • vue简单实现转盘抽奖

    题目描述:请详细讲解“Vue 简单实现转盘抽奖”的完整攻略,过程中至少包含两条示例说明。 背景 本文将介绍通过 Vue 来实现一个简单的转盘抽奖的过程,在该过程中,我们将了解到如何使用 Vue 完成上下文管理、响应式处理和事件监听等功能。 准备工作 在开始前,我们需要保证以下工具已经安装: Vue.js (例如可以使用 Vue CLI 创建项目后,使用 np…

    Vue 2023年5月27日
    00
  • vuejs element table 表格添加行,修改,单独删除行,批量删除行操作

    以下是“vuejs element table 表格添加行,修改,单独删除行,批量删除行操作”的攻略。 添加行 要添加行,首先需要在data中定义一个空的数组来存放表格数据。然后,在模板中使用el-table组件和el-table-column组件来渲染表格,并给el-table组件绑定数据源。 接下来,我们可以在模板中添加一个类似“添加行”的按钮,当用户点…

    Vue 2023年5月28日
    00
  • vue中watch监听器的触发时机(watch的坑及解决)

    是的,Vue中的watch监听器在开发过程中经常用到,它可以监听指定的数据对象的变化,并在变化时触发相应的回调函数进行处理。但是由于Vue是响应式框架,watch监听器的触发时机会受到一些意外的影响,从而导致一些坑。本文将结合示例说明Vue中watch监听器的使用和坑及解决办法。 监听对象 Vue中可以使用$watch方法监听对象的属性变化,例如下面这个示例…

    Vue 2023年5月29日
    00
  • Vue之组件的自定义事件详解

    Vue之组件的自定义事件详解 Vue是一个基于组件化开发的框架,组件的通信是非常重要的一部分。除了父子组件之间的通信,组件之间可以使用自定义事件来进行通信。本文将详细讲解Vue组件的自定义事件的使用方法。 什么是Vue组件的自定义事件 在Vue组件中,我们可以使用$emit()方法来触发自定义事件,然后在父组件中通过监听该自定义事件来接收数据。在一个父组件中…

    Vue 2023年5月28日
    00
  • Vue 中 createElement 使用实例详解

    下面我给出“Vue 中createElement 使用实例详解”的完整攻略,包括基本语法和两条示例说明。 What is createElement? createElement 是 Vue 的一个渲染函数,它通过 JavaScript 代码的方式生成虚拟 DOM。通过 createElement 我们能够在 JS 代码中定义 Vue 的组件,从而实现动态渲…

    Vue 2023年5月29日
    00
  • electron vue 模仿qq登录界面功能实现

    好的!接下来我会详细讲解“electron vue 模仿qq登录界面功能实现”的完整攻略。 首先,你需要了解以下内容: Electron:一个使用 JavaScript、HTML 和 CSS 等 Web 技术创建桌面应用程序的开源框架; Vue.js:一款渐进式 JavaScript 框架,易于上手、轻量级且易于扩展; vue-cli-plugin-elec…

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