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

yizhihongxing

一篇文章带你吃透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框架通用化解决个性化文字换行问题实例详解

    对于“vue框架通用化解决个性化文字换行问题实例详解”的攻略,我将按照以下标题进行讲解。 解决方案背景和问题描述 在使用Vue框架开发应用时,我们经常会遇到一些个性化问题,例如文字长度不一致引起的换行问题。在这种情况下,我们需要一种通用的解决方案,能够在不同场景下灵活地适应不同的需要。因此,本文将介绍一种如何解决Vue框架下个性化文字换行问题的通用方案。 具…

    Vue 2023年5月27日
    00
  • Vue实现选择城市功能

    Vue实现选择城市功能可以分为以下步骤: 1. 引入第三方城市数据 为了实现城市选择功能,我们需要先引入第三方城市数据,这里可以选择 city.json 这个json文件,里面包含了全国各个城市的数据。 2. 安装并引入element-ui组件库 Vue框架本身并不提供选择框组件,所以我们需要借助第三方的UI组件库。这里我们选择element-ui组件库,并…

    Vue 2023年5月28日
    00
  • Vue指令之 v-cloak、v-text、v-html实例详解

    Vue指令之 v-cloak、v-text、v-html实例详解 在Vue中,指令(Directive)是一种特殊的标记,可以在模板中使用,用于动态地将数据渲染到HTML中。指令以“v-”开头,例如v-bind、v-for等。除了常见的指令以外,Vue还提供了一些常用的指令,如v-cloak、v-text和v-html。 v-cloak v-cloak指令是…

    Vue 2023年5月27日
    00
  • vue中filters 传入两个参数 / 使用两个filters的实现方法

    在 Vue 中,可以使用 filter 过滤器来处理模板中的数据。filter 在显示数据之前对其进行处理,比如对字符串格式化、将时间格式化等等。 在 Vue 中,我们可以定义一个 filter 来处理一些数据,此时这个 filter 就是一个全局的 filter。可以被任何组件进行调用。 现在我们来详细讲解“vue中filters 传入两个参数 / 使用两…

    Vue 2023年5月27日
    00
  • vue计时器的实现方法

    下面是关于vue计时器实现方法的详细攻略。 1. 前置知识 Vue.js框架基础知识 Vue.js生命周期钩子函数 Vue.js计算属性 2. 实现方法 2.1 通过setInterval实现 我们可以通过JavaScript自带的setInterval函数来实现一个简单的计时器。对于Vue.js来说,我们可以在组件中使用created生命周期函数来创建一个…

    Vue 2023年5月29日
    00
  • 基于vue-draggable 实现三级拖动排序效果

    当我们需要实现在前端页面中完成三级拖动排序效果的时候,可以使用vue-draggable组件来完成。具体实现步骤如下: 步骤一:安装vue-draggable 首先要安装vue-draggable组件: npm install vuedraggable 步骤二:定义基本结构 在Vue组件中,我们需要定义一些基本的结构,包括三个列表,两个按钮等。可以参考以下代…

    Vue 2023年5月27日
    00
  • vue-cli脚手架-bulid下的配置文件

    当使用 Vue.js 开发项目时,经常会使用到 Vue CLI 脚手架工具来初始化项目,并在 build 时自动生成配置文件来进行编译、打包等操作。以下是 Vue CLI 脚手架中 bulid 下的配置文件的详细解析: 1. 配置文件的作用 Vue CLI 脚手架的 build 目录下存放的是一些 webpack 的配置文件,这些配置文件主要用于在生产环境下…

    Vue 2023年5月28日
    00
  • Vue中props的使用详解

    Vue中props的使用详解 什么是props 在Vue中,每个组件都可以接受一些参数,这些参数被称为props。props是一个数组,在组件定义中声明。你可以使用props从父组件中传递数据到子组件中。 如何使用props 在组件定义中声明props属性,用于接收父组件中传递的数据。在组件使用中,使用v-bind指令将需要传递给子组件的数据,绑定到组件的对…

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