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

yizhihongxing

来讲解一下“几分钟弄懂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日

相关文章

  • vuejs中使用mixin局部混入/全局混入的方法详解

    下面我详细讲解下“vuejs中使用mixin局部混入/全局混入的方法详解”。 什么是Mixin? 在VueJS中,Mixin是一种可以将多个组件中重复的代码封装成可复用的功能的方法。你可以将一些常见的代码部分提取出来形成一个Mixin对象,然后将它应用到多个组件中去。 全局混入 全局混入是指将Mixin全局应用于所有的Vue实例中去。这样做的好处是可以避免重…

    Vue 2023年5月28日
    00
  • vue3+ts+vite+electron搭建桌面应用的过程

    下面是关于使用Vue3、TypeScript、Vite和Electron搭建桌面应用的完整攻略。 搭建步骤 1. 创建项目工程 首先需要安装Vite脚手架,在终端中输入以下命令安装: npm install -g create-vite-app 安装完成后,通过以下命令创建项目工程: create-vite-app my-project 此时会询问你需要使用…

    Vue 2023年5月28日
    00
  • Vue中四种操作dom方法保姆级讲解

    下面我就为你详细讲解一下“Vue中四种操作dom方法保姆级讲解”的攻略。 1. Vue中的DOM操作 在Vue中,我们可以通过四种方法操作DOM元素,这四种方法分别是:插入、更新、删除和替换。下面我们就来仔细看看这四种方法。 2. 插入一个DOM元素 我们可以利用Vue提供的v-html指令或{{}}插值语法插入一个DOM元素。以v-html指令为例,它可以…

    Vue 2023年5月27日
    00
  • Element实现表格嵌套、多个表格共用一个表头的方法

    当需要在Element框架中实现表格嵌套或多个表格共用一个表头时,可以采用以下两种方法: 方法一:使用 render 函数自定义表格中每一列的渲染方式 示例如下: <template> <el-table :data="tableData"> <el-table-column prop="name&…

    Vue 2023年5月29日
    00
  • websocket在springboot+vue中的使用教程

    下面是关于使用WebSocket在Spring Boot和Vue中的完整攻略。 WebSocket 在 Spring Boot 和 Vue 中的使用教程 什么是 WebSocket? WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单、更便捷,且可以实现低…

    Vue 2023年5月28日
    00
  • 浅谈vue2的$refs在vue3组合式API中的替代方法

    下面是关于“浅谈vue2的$refs在vue3组合式API中的替代方法”的详细讲解攻略: 1、什么是$refs 在Vue2中,我们可以通过在模板中给DOM元素添加ref属性,然后通过this.$refs来访问这个元素或组件实例,这个访问实例的方式就是Vue2中的$refs。 2、在vue3组合式API中$refs有什么改变 在Vue3中,Vue官方推荐使用组…

    Vue 2023年5月28日
    00
  • vue项目中使用vue-layer弹框插件的方法

    以下是关于Vue项目中使用vue-layer弹框插件的方法的完整攻略: 1. 下载vue-layer 在Vue项目中使用vue-layer弹框插件之前,首先需要下载vue-layer。可以通过npm包管理器来下载。 npm install vue-layer –save 在安装完成后,可以通过以下方式引入和使用vue-layer弹框。 2. 引入vue-l…

    Vue 2023年5月28日
    00
  • Vue中动态引入图片要是require的原因解析

    在Vue中,动态引入图片通常使用 require 函数,而不是简单的通过路径引入图片文件。这是因为,在Vue中使用 require 函数可以将图片打包到最终的编译文件中,同时也可以进行优化和压缩。 接下来,我们将详细讲解 “Vue中动态引入图片要是require的原因解析”: 为何要动态引入图片 在Vue开发中,我们通常需要引入一些静态的资源,比如图片、音频…

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