一篇文章带你吃透Vuex3的状态管理

一篇文章带你吃透Vuex3的状态管理

什么是Vuex

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理各组件共享的一些状态,使得状态管理变得简单而且容易理解。它的主要作用是用于管理Vue.js应用中的各种状态。

Vuex的结构

Vuex包含5个部分:

  • State:用于存储状态变量
  • Mutation:用于改变state中的值
  • Action:定义方法来分发Mutation
  • Getter:从state中派生出一些值
  • Module:为了解决Vuex模块化问题

安装Vuex

可以通过npm包管理器安装Vuex,也可以从CDN获取。

npm install vuex --save

使用Vuex

安装完Vuex之后,需要通过Vue.use()来启用Vuex。

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

Vue.use(Vuex)

正确的启用Vuex后,我们可以在Vue.js的组件中使用store对象对共享的数据进行操作。

<script>
export default {
  computed: {
    counter () {
      return this.$store.state.count
    }
  },
  methods: {
    increment () {
      this.$store.commit('increment')
    }
  }
}
</script>

State

State是唯一的共享数据中心,它用于存放数据。我们在组件中也可以访问state中的数据,并且我们可以在Mutation中修改state中的数据。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

我们可以通过以下语句来访问state中的数据。

this.$store.state.count

Mutation

Mutation用于修改state中的数据。Mutation必须是同步函数,并且它只能在store中被调用,而且调用也只能是commit方法。Mutation接收每个调用的参数就是当前state。

我们可以通过以下语句来调用Mutation。

this.$store.commit('increment')

Action

Action用于提交Mutation,异步的程序会在这里执行。Action可以用于提交一个或多个Mutation,并且会被commit方法触发。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    incrementAsync ({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})

我们可以通过以下语句来提交Action。

this.$store.dispatch('incrementAsync')

Getter

Getter可以返回计算后的属性,并且可以监控属性的变化。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  getters: {
    doubleCount: state => {
      return state.count * 2
    }
  }
})

我们可以通过以下语句来访问getter中的属性。

this.$store.getters.doubleCount

Module

Module可以帮助我们更好地组织代码,使得代码更易于维护。Module允许我们将store分解成多个模块,每个模块都有自己的state、mutation、action和getter。

const store = new Vuex.Store({
  modules: {
    moduleA: {
      state: {},
      mutations: {},
      actions: {},
      getters: {}
    },
    moduleB: {
      state: {},
      mutations: {},
      actions: {},
      getters: {}
    }
  }
})

示例说明

示例1:计数器

这个示例用一个计数器来说明Vuex的使用方法。

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

<script>
export default {
  computed: {
    count () {
      return this.$store.state.count
    }
  },
  methods: {
    increment () {
      this.$store.commit('increment')
    },
    decrement () {
      this.$store.commit('decrement')
    }
  }
}
</script>
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    },
    decrement (state) {
      state.count--
    }
  }
})

示例2:TodoList

这个示例用一个TodoList来说明Vuex的使用方法。

<template>
  <div>
    <form @submit.prevent="addTodo">
      <input v-model="newTodo">
      <button type="submit">Add Todo</button>
    </form>

    <ul>
      <li v-for="(todo, index) in todos" :key="index">
        {{ todo }}
        <button @click="deleteTodo(index)">x</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data () {
    return {
      newTodo: ''
    }
  },
  computed: {
    todos () {
      return this.$store.state.todos
    }
  },
  methods: {
    addTodo () {
      this.$store.commit('addTodo', this.newTodo)
    },
    deleteTodo (index) {
      this.$store.commit('deleteTodo', index)
    }
  }
}
</script>
const store = new Vuex.Store({
  state: {
    todos: []
  },
  mutations: {
    addTodo (state, todo) {
      state.todos.push(todo)
    },
    deleteTodo (state, index) {
      state.todos.splice(index, 1)
    }
  }
})

以上就是关于Vuex的详细讲解和两个示例。希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你吃透Vuex3的状态管理 - Python技术站

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

相关文章

  • Vue (Vuex)中 store 基本用法

    Vue 提供了 Vuex 这个基于 Flux 架构的状态管理工具。使用 Vuex,我们可以在应用程序的任何组件中非常方便的存储和更新应用的状态数据。这里我们来讲解一下 Vuex 中 store 的基本用法,包括 state、getters、mutations 和 actions 四个部分。 创建 store 我们需要先创建一个 Vuex.store,这个 s…

    Vue 2023年5月27日
    00
  • Vue如何清空对象

    Vue清空对象的方法有很多,下面将介绍其中两个常用的方法。 方法一:使用Vue.set方法 Vue.set方法可以在Vue实例中添加或修改对象的某个属性,也可以将某个属性从对象中删除。当将该属性的值设为null时,对象就被清空。 示例代码如下: <template> <div> <div>原对象:{{ obj }}<…

    Vue 2023年5月28日
    00
  • vue计算属性时v-for处理数组时遇到的一个bug问题

    当使用 Vue.js 中计算属性时,我们可能会遇到一个问题,即在使用 v-for 渲染数组时,计算属性的计算结果会受到数组项顺序的影响,导致计算结果不正确。这个问题可以通过对计算属性进行优化来解决。 首先,我们可以看一下一个示例程序,它使用 v-for 和一个计算属性来渲染一个数组: <!– 在模板中使用 v-for 渲染一个数组,使用计算属性计算数…

    Vue 2023年5月29日
    00
  • Vue使用echarts的完整步骤及解决各种报错

    Vue使用echarts步骤: 安装echarts 在项目中安装echarts依赖。使用npm安装,在终端中输入以下命令: npm install echarts –save 引入echarts 在需要使用echarts的组件中引入echarts。 import echarts from ‘echarts’ 初始化图表 使用echarts提供的初始化方法进…

    Vue 2023年5月28日
    00
  • 从零到一详聊创建Vue工程及遇到的常见问题

    从零到一详聊创建Vue工程及遇到的常见问题 Vue.js是一款流行的JavaScript框架,非常适合构建现代化的Web应用程序,本文将介绍如何从零开始创建Vue.js工程,并解决一些常见的问题。 步骤1:安装Node.js 在开始之前,我们需要先安装Node.js。Node.js是一款基于Chrome V8引擎的JavaScript运行时,可以在服务器端运…

    Vue 2023年5月27日
    00
  • element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】

    下面就针对题目中所涉及的内容进行详细介绍。 Element UI中的表单验证 Element UI提供了简单易用的表单验证功能。在Vue项目中使用Element UI时,可以通过对Element UI的form组件进行配置,来实现表单的验证功能。 验证名称重复 在表单验证过程中,可能会遇到需要验证某个字段的值是否与数据库中已有的值重复的情况。此时,可以通过自…

    Vue 2023年5月27日
    00
  • 一篇文章学会Vue中间件管道

    下面是一份关于“一篇文章学会Vue中间件管道”的完整攻略: 什么是Vue中间件管道 Vue中间件管道是一种机制,它允许您在路由导航前或后执行自定义代码。您可以使用它来验证用户的身份、获取数据、在加载组件之前异步加载其他资源等。中间件是Vue的一个核心特性,因为它可以帮助您实现许多常见的需求。 如何在Vue中使用中间件管道 步骤一:创建中间件 在Vue中,创建…

    Vue 2023年5月28日
    00
  • 解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题

    在使用 mpvue + vuex 开发微信小程序时,可能会遇到 vuex 辅助函数 mapState、mapGetters 不可用的问题。这是因为 mpvue 框架在编译时将 store 对象注入到每个组件的 data 属性中,而在 wxs 中无法访问 data 中的对象,因此会导致 mapState、mapGetters 函数无法正常使用。 要解决这个问题…

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