首页 > 其他分享 >【前端每日基础】day42——关于 Vuex 共有几个属性,哪里可以书写同步任务,哪里可以书写异步任务?如果在 Vuex 中调用请求,在 Vuex 中会经历的流程大致描述一下

【前端每日基础】day42——关于 Vuex 共有几个属性,哪里可以书写同步任务,哪里可以书写异步任务?如果在 Vuex 中调用请求,在 Vuex 中会经历的流程大致描述一下

时间:2024-06-03 21:32:03浏览次数:33  
标签:异步 书写 state error commit Vuex day42 store

Vuex 是 Vue.js 的一个状态管理模式,它集中式地存储和管理应用的所有组件的状态。Vuex 提供了以下几个核心属性,每个属性在状态管理中有不同的用途:

Vuex 共有的几个属性:
State:

用于存储应用的状态。
可以通过 this.$store.state 或在组件中通过 mapState 辅助函数访问。
Getters:

类似于组件中的计算属性,用于派生出一些状态。
接受 state 作为其第一个参数,可以用于过滤或计算数据。
可以通过 this.$store.getters 或在组件中通过 mapGetters 辅助函数访问。
Mutations:

用于更改 state,必须是同步的。
每个 mutation 都有一个类型(字符串常量)和一个回调函数,回调函数是实际进行状态变更的地方。
可以通过 this.$store.commit 方法触发。
Actions:

用于提交 mutations,可以包含异步操作。
每个 action 都有一个类型(字符串常量)和一个回调函数,回调函数可以包含异步逻辑。
可以通过 this.$store.dispatch 方法触发。
Modules:

用于将 store 分割成多个模块,每个模块有自己的 state、getters、mutations 和 actions。
适用于大型应用。
同步任务和异步任务
同步任务:在 mutations 中书写,因为 mutations 必须是同步函数。这是为了确保状态变更的可追踪性。

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

异步任务:在 actions 中书写,因为 actions 可以包含异步操作,并且可以在异步操作完成后再提交 mutations 以改变状态。

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

在 Vuex 中调用请求的流程:
组件中调用 dispatch 触发 action:

this.$store.dispatch('fetchData');

在 Vuex 中调用请求的流程:
组件中调用 dispatch 触发 action:
组件中调用 dispatch 方法来触发一个 action。这个 action 通常包含异步操作,如 API 请求。

// 在组件中
this.$store.dispatch('fetchData');

在 action 中执行异步操作:
action 接受 context 作为参数(可以解构出 commit 和 state),在 action 中执行异步操作,如 API 请求。

// 在 store.js 中
const store = new Vuex.Store({
  state: {
    data: null,
    loading: false,
    error: null,
  },
  mutations: {
    setData(state, payload) {
      state.data = payload;
    },
    setLoading(state, isLoading) {
      state.loading = isLoading;
    },
    setError(state, error) {
      state.error = error;
    },
  },
  actions: {
    async fetchData({ commit }) {
      commit('setLoading', true);
      try {
        const response = await fetch('https://api.example.com/data');
        const data = await response.json();
        commit('setData', data);
      } catch (error) {
        commit('setError', error);
      } finally {
        commit('setLoading', false);
      }
    },
  },
});

请求成功后,在 action 中调用 commit 提交一个 mutation:
异步操作(如 API 请求)完成后,通过 commit 提交一个或多个 mutation 来更新 state。

actions: {
  async fetchData({ commit }) {
    commit('setLoading', true);
    try {
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
      commit('setData', data);
    } catch (error) {
      commit('setError', error);
    } finally {
      commit('setLoading', false);
    }
  },
}

mutation 同步更新 state:
mutation 是同步函数,用于修改 state,如设置加载状态、更新数据或设置错误信息。

mutations: {
  setData(state, payload) {
    state.data = payload;
  },
  setLoading(state, isLoading) {
    state.loading = isLoading;
  },
  setError(state, error) {
    state.error = error;
  },
}

组件监听 state 的变化,并自动更新视图:
组件通过计算属性(或直接访问 state)监听 state 的变化,当 state 更新时,Vue 的响应式系统会自动更新视图。

computed: {
  data() {
    return this.$store.state.data;
  },
  loading() {
    return this.$store.state.loading;
  },
  error() {
    return this.$store.state.error;
  }
}

综述
通过这种流程,Vuex 实现了从组件触发异步操作,到状态更新,再到组件视图更新的完整数据流动过程。这种模式确保了状态的集中管理和变更的可追踪性,使应用状态管理更加清晰和可维护。

标签:异步,书写,state,error,commit,Vuex,day42,store
From: https://blog.csdn.net/modaoshi51991/article/details/139424516

相关文章

  • vue之vuex使用
    如图所示,它是一个程序里面的状态管理模式,它是集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化。对于可以预测,现在我不多做说明,相信在看完这篇文章之后,你就会有自己的理解。第一步,了解Vuex......
  • 前端面试题日常练-day42 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末1.在Bootstrap中,以下哪个类用于创建一个具有响应式图片的容器?a).img-responsiveb).image-containerc).responsive-imgd).picture-container2.哪个Bootstrap类用于创建一个具有固定高度的容器?a).con......
  • 第二十六章HTML与CSS书写规范
    1.HTML书写规范1.文档类型声明及编码统一为html5声明类型。编码统一为utf-8。2.页面tdkTDK是一个缩写,其中“T”表示为网页定义标题,“D”表示为网页定义描述description,“K”表示为搜索引擎定义关键词keywords。1、<title>标题:只强调重点即可,尽量把重要的关键词放在前面......
  • 《python编程从入门到实践》day42
    #昨日知识点回顾        使用Bootstrap设置项目“学习笔记”的样式#今日知识点学习    20.1.3修改base.html        1.定义HTML头部#base.html{%loadbootstrap4%}<!doctypehtml><htmllang="en"><head> <metacharset="utf......
  • vue2组件中监听vuex中state的值
    vue2组件中监听Vuex 中state的值可以使用 mapState。官网链接:mapGetters辅助函数仅仅是将store中的getter映射到局部计算属性。Getter|Vuex(vuejs.org)参考文档: 监听Vuex中的数据变化-资深if-else侠-博客园(cnblogs.com)Vuex入门(2)——state,mapState,...ma......
  • Vue搭建移动端h5项目(已开源,附带git地址)Vant+Vue Router+Vuex+axios封装+案例交互+部分
    一、项目介绍以及项目地址             项目介绍:vue2搭建。项目通过amfe-flexible与postcss-pxtorem实现移动端适配;通过Vantui作为项目的组件库;通过Vuex管理数据状态,进行模块化管理;通过VueRouter配置项目路由,进行模块化管理;封装axios进行数据的请求,以及一些页......
  • bash文件书写学习记录
    参考资料:基于Bash脚本自己开发ROS的一键启动-古月居(guyuehome.com)#!/bin/bash和#!/usr/bin/envbash的区别-CSDN博客几种常见shell解释器(sh,bash,csh,tcsh,ash)以及bash的优点_bash与ash-CSDN博客 第一个链接对于bash文件的书写写的挺好的通俗易懂;  launch文件......
  • Vuex
    【一】了解Vuex【1】想象一个场景如果你的项目里有很多页面(组件/视图),页面之间存在多级的嵌套关系,此时,这些页面假如都需要共享一个状态的时候,此时就会产生以下两个问题:多个视图依赖同一个状态来自不同视图的行为需要变更同一个状态【2】解决方案​ 对于第一个问题,假如是多......
  • 混入、插件、插槽、vuex、本地存储
    【混入】#mixin(混入)功能:可以把多个组件共用的配置提取成一个混入对象,不需要在每个组件中都写了使用步骤   。。。【插件】1#1写plugins/index.js2importVuefrom"vue";3importaxiosfrom"axios";4importhunrufrom"@/mixin";......
  • 真实性——简历书写你不得不注意的至上准则
    要尽量提供个人简历中提到的业绩和能力的证明资料,并作为附件附在个人简历的后面。一定要记住是复印件,千万不要寄原件给招聘单位,以防丢失。一定要用积极的语言,切忌用缺乏自信和消极的语言写个人简历。最好的方法是在心情好的时候编写个人简历。不能凭空编造经历,说谎永远是卑鄙的,没......