几分钟弄懂Vuex的五大属性和使用方式

来讲解一下“几分钟弄懂Vuex的五大属性和使用方式”的攻略。

1. 什么是Vuex?

Vuex是一个专门为Vue.js开发的状态管理模式。它采用集中式存储管理您应用所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

2. Vuex的五大属性

在Vuex中,数据是通过五个核心属性进行管理:state、mutation、getter、action和module。

2.1 state

State用于存放应用程序状态,即其所有数据。

State数据可以在模板和实例中通过this.$store.state直接得到。

下面是一个简单的计数器示例:

// store.js

const store = new Vuex.Store({
  state: {
    count: 0
  }
})

// App.vue

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

<script>
export default {
  computed: {
    count() {
      return this.$store.state.count
    }
  },
  methods: {
    increment() {
      this.$store.state.count++
    },
    decrement() {
      this.$store.state.count--
    }
  }
}
</script>

2.2 mutations

在Vuex中,state数据可以通过提交mutations实现改变。

mutations是一些操作state的方法。

每个mutation都有一个字符串类型的事件类型和一个回调函数,该函数被用于实际改变状态。

下面是一个修改count的示例:

// store.js

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

// App.vue

<template>
  <div>
    <p>Count: {{ count }}</p>
    <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>

2.3 getter

Getter用于从store中派生状态。

Getter会对store中的state数据进行一些计算和处理后,生成一个新的数据供其他组件使用。

Getter的使用方式和computed属性类似。可以通过在计算属性中返回store的getter函数来获取它的值。

下面是一个示例:

// store.js

const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, text: 'todo1', done: true },
      { id: 2, text: 'todo2', done: false },
      { id: 3, text: 'todo3', done: false }
    ]
  },
  getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }
})

// App.vue

<template>
  <div>
    <ul>
      <li v-for="todo in doneTodos" :key="todo.id">{{ todo.text }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  computed: {
    doneTodos() {
      return this.$store.getters.doneTodos
    }
  }
}
</script>

2.4 action

Action用于处理异步任务和复杂逻辑。

Action类似于mutation,但是Action可以包含异步操作,而mutation之所以不能包含异步操作是因为mutation必须是同步的。

Action包含两个部分:一个描述事件的type和一个callback函数,Callback函数接受一个名为context的context对象。Context对象包含store中的state、getter和commit功能。

下面是一个示例:

// store.js

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

// App.vue

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">+</button>
    <button @click="incrementAsync">+ (2s)</button>
  </div>
</template>

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

2.5 module

Module可以将store分割成更小的模块。

每个模块都拥有自己的state、getter、mutation、action等。

下面是一个简单的示例:

// store.js

const moduleA = {
  state: () => ({
    count: 0
  }),
  mutations: {
    increment(state) {
      state.count += 1
    }
  },
  actions: {
    incrementAsync(context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  }
}

const moduleB = {
  state: () => ({
    name: 'moduleB'
  })
}

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

3. 使用方式

在使用Vuex时,常用的方式是将store注入Vue实例中。

下面是一个注入示例:

// main.js

import Vue from 'vue'
import store from './store' // 引入store
import App from './App.vue'

new Vue({
  store,
  render: h => h(App)
}).$mount('#app')

在这个示例中,store被注入到Vue实例中,从而使我们可以在整个应用程序中访问$store实例。

4. 总结

在本文中,我们介绍了Vuex的五个核心属性及其使用方式。这些属性是:state、mutation、getter、action和module。虽然这些概念有些抽象,但如果按照上述攻略认真去理解,相信大家可以很快地掌握Vuex。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:几分钟弄懂Vuex的五大属性和使用方式 - Python技术站

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

相关文章

  • Vue验证码60秒倒计时功能简单实例代码

    那么我们来逐步讲解如何使用Vue实现验证码60秒倒计时功能的步骤和代码实现。 步骤一:安装Vue 首先,需要安装Vue,可通过以下命令安装: npm install vue 步骤二:创建Vue实例 在HTML页面中引入Vue库后,需创建Vue实例,用于管理页面数据和操作行为: const vueApp = new Vue({ el: ‘#app’, data…

    Vue 2023年5月29日
    00
  • laravel 5.4 + vue + vux + element的环境搭配过程介绍

    下面就是”laravel 5.4 + vue + vux + element的环境搭配过程介绍”。 简介 这里要介绍的是如何在 laravel 5.4 中使用 Vue.js,并配合使用 vux 和 element 框架。Vue.js 是一个轻量级的前端框架,通过数据绑定和组件化的方式,使得前端的开发更加高效和便捷。vux 是一个专门面向移动端 UI 的框架,…

    Vue 2023年5月28日
    00
  • vue中如何使用echarts和echarts-gl实现3D饼图环形饼图

    要在Vue中使用ECharts和ECharts-GL实现3D饼图和环形饼图,需要按照以下步骤进行操作: 步骤1. 安装ECharts和ECharts-GL 在Vue项目中安装ECharts和ECharts-GL,可以使用npm或yarn命令进行安装,命令如下: npm install echarts –save npm install echarts-gl…

    Vue 2023年5月28日
    00
  • ant design 日期格式化的实现

    Ant Design 日期格式化的实现 Ant Design 是蚂蚁金服开发的一套基于 React 的企业级 UI 组件库,其中包含了日期选择器和日期格式化工具。 日期格式化工具 Ant Design 中的日期格式化工具是基于 Moment.js 的 API 实现的。 Moment.js 是一个用于解析、验证、操作和显示日期以及时间的 JavaScript …

    Vue 2023年5月29日
    00
  • Vue.js实现多条件筛选、搜索、排序及分页的表格功能

    标题:Vue.js实现多条件筛选、搜索、排序及分页的表格功能攻略 介绍 在Vue.js中实现一个具有多条件筛选、搜索、排序及分页功能的表格,是一个非常常见的需求。这种表格通常用于展示大量数据,让用户可以方便地查找并进行各种操作。在本篇攻略中,将介绍如何使用Vue.js实现这样一个表格功能。 步骤 步骤一 – 准备和设计数据结构 在实现这样一个表格功能之前,需…

    Vue 2023年5月29日
    00
  • 详解vue-cli 2.0配置文件(小结)

    下面来详细讲解“详解vue-cli 2.0配置文件(小结)”的完整攻略。 什么是vue-cli 2.0配置文件 vue-cli是Vue.js官方提供的一个基于Webpack构建工具的脚手架,用于快速搭建Vue.js项目的基础架构。在Vue.js 2.0版本之前,vue-cli默认使用的是基于Webpack1.x版本的构建工具,因此配置文件也是基于这个版本进行…

    Vue 2023年5月27日
    00
  • elementui导出数据为xlsx、excel表格

    ElementUI是一款基于Vue.js的组件库,提供了丰富的UI组件,其中也包含了导出Excel表格的功能。下面是ElementUI导出数据为xlsx、excel表格的详细攻略: 第一步:安装依赖 首先,在项目中导出Excel表格需要安装以下依赖: npm install -S file-saver xlsx 其中,file-saver用于文件下载,xls…

    Vue 2023年5月27日
    00
  • vue使用recorder.js实现录音功能

    下面是“Vue使用Recorder.js实现录音功能”的完整攻略: 1.引入Recorder.js 首先,在Vue项目中,需要引入Recorder.js。可以在项目中使用npm进行安装,也可以直接引入官方的Recorder.js文件: <script src="https://cdn.jsdelivr.net/gh/mattdiamond/R…

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