首页 > 其他分享 >vue.js actions和getters

vue.js actions和getters

时间:2025-01-15 10:33:22浏览次数:3  
标签:vue getters mutations actions state commit todo

在Vue.js中,使用vuex状态管理库来管理全局状态。其中,actions和getters是vuex中的两个重要概念。

actions用于处理异步操作,例如发送HTTP请求或者其他需要等待结果的操作。它可以包含任意异步操作,并且可以通过commit方法来触发mutations的方法来改变state,也可以通过dispatch方法来触发其他action。

getters用于从state中派生出一些状态,类似于计算属性。它们可以帮助我们根据现有的状态计算出新的状态,并且可以在多个组件中共享和重用。

下面是一个示例,展示了如何在Vue.js应用中使用actions和getters:

// store.js

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

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    count: 0,
    todos: []
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    addTodo(state, todo) {
      state.todos.push(todo);
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    },
    addTodoAsync({ commit }, todo) {
      setTimeout(() => {
        commit('addTodo', todo);
      }, 1000);
    }
  },
  getters: {
    completedTodos(state) {
      return state.todos.filter(todo => todo.completed);
    },
    incompleteTodos(state) {
      return state.todos.filter(todo => !todo.completed);
    }
  }
});

export default store;

在上面的代码中,我们创建了一个名为store的vuex实例,并定义了state,mutations,actions和getters。

在mutations中,我们定义了两个方法:increment和addTodo。这些方法用于更新state中的数据。

在actions中,我们定义了两个方法:incrementAsync和addTodoAsync。这些方法可以执行异步操作,并通过commit方法触发mutations中的方法来更新state中的数据。

在getters中,我们定义了两个方法:completedTodos和incompleteTodos。这些方法可以根据现有的state派生出新的状态,并且可以在组件中使用。

现在我们可以在Vue组件中使用actions和getters:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Completed Todos: {{ completedTodos.length }}</p>
    <p>Incomplete Todos: {{ incompleteTodos.length }}</p>
    <button @click="incrementAsync">Increment Async</button>
    <button @click="addTodoAsync">Add Todo Async</button>
  </div>
</template>

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

export default {
  computed: {
    ...mapState(['count']),
    ...mapGetters(['completedTodos', 'incompleteTodos'])
  },
  methods: {
    ...mapActions(['incrementAsync', 'addTodoAsync'])
  }
};
</script>

在上面的示例中,我们使用了mapState,mapGetters和mapActions辅助函数来将state, getters和actions映射到组件的computed和methods中,这样我们就可以直接在模板中使用它们。

总结一下,actions用于处理异步操作,并通过commit方法触发mutations来更新state。getters用于派生出新的状态,并在多个组件中共享和重用。通过使用这两个概念,我们可以更好地组织和管理Vue.js应用的全局状态。

标签:vue,getters,mutations,actions,state,commit,todo
From: https://blog.csdn.net/zxcv321zxcv/article/details/145153245

相关文章

  • vue.js辅助函数-mapMutations
    在Vue.js中,使用辅助函数可以更方便地使用Vuex的mutation。而mapMutations就是Vuex提供的一个辅助函数,它可以将mutation映射到组件的methods中,使得我们可以在组件中直接调用mutation,而不需要手动进行commit。mapMutations函数接收一个字符串数组或对象作为参数,数组中的字符串即......
  • vuex 构建多组件共享的数据环境
    Vuex是Vue.js的官方状态管理库,用于在Vue.js应用程序中构建多个组件共享的数据环境。Vuex可以帮助我们解决组件之间共享数据和状态管理的问题。它将应用程序的状态存储在一个单一的地方,称为"store",并且允许组件直接从store中获取和修改状态,而不需要通过事件或属性传递......
  • VUE2-表格根据方向键聚焦编辑框
    需求项目需要表格内的编辑框可以根据上下左右方向键去自动聚焦实现思路查阅网上的资料,是给表格内的每一个编辑框增加一个标识,要么类,要么是类似递增的一个id,然后监听键盘事件,但是我觉得这样不好,需要手动给每个编辑框加标识,太麻烦了。我的思路是写一个指令"keyboard-navigati......
  • Python+Django的框架药品购买系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的框架药品购买系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql......
  • Python+Django的智能宾馆预定系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的智能宾馆预定系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数......
  • 基于SpringBoot + Vue的百货中心管理系统
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的宿舍报修系统(角色:学生、维修人员、管理员)
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • Vue.js组件开发-使用地图绘制轨迹
    在Vue.js中开发一个组件来展示地图并绘制轨迹,可以使用诸如Leaflet.js、MapboxGLJS或百度地图等地图库。这些库提供了丰富的API来创建和定制地图,以及绘制路径、标记和其他地图元素。示例:1.安装Leaflet.js首先,需要安装Leaflet.js库。可以通过npm或yarn来安装:npminstalll......
  • springboot毕设 基于Springbootvue的教学辅助系统设计与实现 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,教育领域正经历着深刻的变革。传统的教学模式已难以满足当前多元化、个性化的学习需求。在这一背景下,教学辅助系统的出现成为......
  • 64.在Vue3中使用OpenLayers显示带箭头的线段,箭头居中
    在WebGIS开发中,使用OpenLayers渲染地图和矢量图形是常见的需求。今天我们来实现一个效果:在Vue3项目中,使用OpenLayers显示带箭头的线段,并让箭头居中。项目环境和技术栈Vue3+CompositionAPIOpenLayersVite构建工具实现效果我们将绘制一条由多个坐标点构成的线......