Vuex的常用项目结构以及请求过程

在路由守卫之前拿到vuex中异步请求数据——vuex中watch方法 vuex中watch的使用 问题:在全局路由守卫中想要通过store拿到异步请求的数据,无法拿到。 我们常见使用vuex,一般是这样的: store模块文件写相关的数据信息,模块一test.js: export default { state: { obj: { count: 2 } }, mutations: { add(state){ return state.obj.count + 1 } }, actions: { 阅读详情


更多关于Vue.js的系列文章请点击:Vue.js开发实践(0)-目录页


在这里插入图片描述

一、入门Vuex

1.1、什么是Vuex

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

简单地说,Vuex为Vue.js项目提供了统一的方法管理。

1.2、Vuex的安装

在Vue.js的webpack项目中,使用npm或者cnpm就可以安装并配置Vuex:
cnpm install vuex --save,安装完成后,在相应webpack项目的package.json文件夹里可以看到这一行配置即代表项目以及导入了Vuex的依赖:

"dependencies": {
    "vuex": "^3.0.1",
    ....
  }

二、Vuex的常用术语解释

  • State:集中初始化所有变量和数据的地方
  • Getters:外部获得数据的唯一点
  • Actions:配置方法映射到Mutations中
  • Mutations:唯一改变数据的地方,当外部触发Actions的commit时会响应其内部的相应函数。

三、Vuex的常用项目结构

Vuex的官方对Vuex的项目结构做出了一定的规范要求,即:

  • 整个项目中,只能有一个状态管理量state
  • 整个项目中,所有的方法映射都在actions中配置并commit给mutations
  • 整个项目中,所有改变state的操作都在mutations中完成

一般来说,可以这样建立项目结构:

├── index.html
├── main.js
├── api
│   └── ... # 抽取出API请求,可有可无
├── components
│   ├── App.vue
│   └── ...
└── store
    ├── index.js      # 导出modules给外部
    └── modules
        ├── cart.js       # 购物车模块
        └── products.js   # 产品模块

如果项目需要管理的方法和数据很多,Vuex官方推荐的项目结构为:

├── index.html
├── main.js
├── api
│   └── ... # 抽取出API请求
├── components
│   ├── App.vue
│   └── ...
└── store
    ├── index.js          # 我们组装模块并导出 store 的地方
    ├── actions.js        # 根级别的 action
    ├── mutations.js      # 根级别的 mutation
    └── modules
        ├── cart.js       # 购物车模块
        └── products.js   # 产品模块

四、vuex-demo请求流程

4.1、需求

点击增加数字或者减少数字,页面的数据动态发生变化。
在这里插入图片描述

4.2、Vuex的请求流程

Vuex的请求流程如图,不过现在可能不太明白,我们稍后通过具体的例子去分析这个流程:
在这里插入图片描述

4.3、Vuex的具体使用

首先使用vue-cli建立webpack项目,并且使用npm导入vuex,这里不再赘述。这是建立的项目结构:
在这里插入图片描述

  • App.vue
<template>
  <div id="app">
    <button @click="addNumber()">点我增加数字!</button>
    <button @click="decNumber()">点我减少数字!</button>

    The number is:{{number}}
  </div>
</template>

<script>
  //导入getter和actions
  import {mapGetters,mapActions} from 'vuex'
  export default {
   data(){
    return{}
   },
   //mapGetters是vuex的核心组件,它在计算属性中使用,
   //用于标记需要改变的量,最后会从getters中获取
   computed:mapGetters([
    'number'
  ]),
   //mapActions用于定义actions中映射的方法名
   methods:mapActions([
    'addNumber',
    'decNumber'
  ])
 }
</script>
<style>
  #app {
    margin:auto;
  }
</style>
  • demo.js
//定义状态量
const state = {
	originNumber: 0
}

//定义getters
const getters = {
	number:state=>{
		return state.originNumber
	}
}

//定义actions映射
const actions = {
 	addNumber({commit}){
 		commit('add')
 	},
 	decNumber({commit}){
 		commit('dec')
 	}
}

//真正用于修改数据的方法
const mutations = {
	add(state){
		//alert(state.originNumber)
		//修改数据
		state.originNumber++
	},
	dec(state){
		state.originNumber--
	}
}

//导出所有配置
export default {
	state,
	getters,
	actions,
	mutations
};
  • store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import demo from './modules/demo';

Vue.use(Vuex);

export default new Vuex.Store({
	modules:{
		demo
	}
})

  • main.js
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import app from './App'
import store from './store'
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#home',
  store,
  components: { app }
})

以上四个部分就可以构成一个完整的Vuex实例了,接下来说说这几个文件中的一些关键配置的作用:

  • App.vue
    这是发送Vuex请求的组件,通过@click="funcName()"去调用实例中的一个方法,这个方法通过mapActions去映射给Actions。
	methods: mapActions([‘funcName’])
  • demo.js
    这是Vuex的核心配置文件,里面配置了state、getters、actions和mutations并导出所有配置,其中state定义了所有初始化数据,getters定义了获取数据的唯一点,而actions则由App.vue中的mapActions进行了映射,并且传递一个commit函数给mutations中的方法realFunc,而realFunc才是真正改变state状态的地方:
	const actions = {
	 funcName({commit}){commit('realFunc')}
}

   const mutatinos = {
	realFunc(state){//state.xxx}
}
  • index.js
    位于store下的index.js的作用是获取modules下所有的Vuex配置文件,在本例中只有一个即demo.js;获取到后,通过导出Vuex.Store注册配置文件,即可在main.js中直接获取store文件夹并且在实例中挂载store了:
import Vue from 'vue';
import Vuex from 'vuex';
import demo from './modules/demo';

Vue.use(Vuex);
//导出Vuex.Store并注册Vuex核心配置文件
export default new Vuex.Store({
	modules:{
		demo
	}
})
  • main.js
    main.js的作用就很明显了,它获取整个store文件夹并且挂载到需要使用Vuex的Vue实例上。
import Vue from 'vue'
import app from './App'
import store from './store'

new Vue({
  el: '#home',
  store,
  components: { app }
})

这就是Vuex的一个请求流程了,结合官方提供的流程图,我们可以发现,我们的Demo完全符合这个请求流程:
App.vue通过mapActions发送一个方法调用请求给demo.js核心配置文件中的actions,在actions中通过调用commit函数去触发位于mutations中的真正方法realFunc(state),之后再通过这个方法改变state状态,并且渲染了实例。

在这里插入图片描述
以下是本例的文件请求图:
在这里插入图片描述

vuex模块化。vuex发请求(发请求全部写在一起,需要时调用。补充:调用vuex里state定义的值的第二种方法) vuex的模块化 state: 存储共享的数据 mutation: 同步修改state的值 action: 异步提交mutation module: 模块 在store文件夹下创建一个文件夹,在创建一个js文件 然后把这个文件引入到index.js文件夹里面,然后在modules里面注册 然后在这个先建的js文件里面写请求,注意这里发请求跳转路由用router.push( ) (也可以用.then().catch()的方式发请求 import api from ‘…/…/http/api’ impo 阅读详情

相关推荐

Vuex —— 同步和异步请求

上一篇讲到 Vuex 状态管理的内容,那么本篇就来将关于Vuex中的同步和异步数据请求,先来简单的回顾一下 Vuex ,Vuex 中有五个核心属性:state 、getter、mutation、action、module。state: 存放数据状态,不能被直接的修改;getter: 基于 state 的计算属性;mutation: 直接更新 state 的多个方法的对象;action: 通过 mutation 间接更新state;module:分模块化;

灵魂学者的博客 3574

Vuex——黑马头条项目(vuex体验版)

1.搭建项目 1.1通过vue-cli脚手架搭建项目:vue create toutiao (选择 vuex/eslint(standard)/pre-cssprocesser(less)) 1.2在main.js中引入样式:import ‘./style/index.css’ 1.3拷贝图片资源到assets目录下 1.4在App.vue中拷贝基本结构: <div id="app"> <ul class="catagtory"> <

weixin_45998300的博客 1771

Vuex->vuex获取值以及改变值,vuex异步请求

同步:某一个时间点只做一件事情,只有当这件事做完,才做另一件事。:提交mutation,可以包含异步操作。异步:某一个时间点,可以做许多事情。1.vuex获取值以及改变值。vuex获取值以及改变值。:将vuex进行分模块。2.vuex异步请求。

weixin_73471776的博客 876

Vue 教程(四十九)Vuex 核心概念和项目结构

Vue 教程(四十九)Vuex 核心概念和项目结构 Vuex 核心概念 State Getters Mutations Actions Modules State 单一状态树 Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 ”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。 new Vue({ // state data() {

yuan_xw的专栏 459

vue2 + vuex的项目,整个流程一目了然,麻雀虽小,五脏俱全,适合作为入门练习。

这个项目主要用于 vue2 + vuex 的入门练习,另外推荐一个 vue2 比较复杂的大型项目,覆盖了vuejs大部分的知识点。目前项目已经完成。 ## 项目运行(nodejs 6.0+) ``` bash # 克隆到本地 git clone https://github.com/bailicangdu/vue2-happyfri.git # 进入文件夹 cd vue2-happyfri # 安装依赖 npm install 或 yarn(推荐) # 开启本地服务器localhost:8088 npm run dev # 发布环境 npm run build [demo地址](http://cangdu.org/happyfri/)(请用chrome手机模式预览)

vuex 项目结构目录及一些简单配置介绍

主要介绍了vuex 项目结构目录及一些简单配置,需要的朋友可以参考下

vuex的作用以及基本工作流程

Vuex的使用场景以及作用 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex的使用场景 如果我们需要构建一个中大型单页应用,就要考虑如何更好地在组件外部管理状态,Vuex将会成为自然而然的选择。 Vuex的作用 解决了组件之间统一状态的问题,实现组件之间的数据持久化。在项目中可以使用vuex存放数据,不用每次都请求后端服务器,提高性能 Vuex的工作流程 在vue组件中通过dispatch来

fengherili159的博客 546

四款办公Agent实测对比:WorkBuddy、千问办公、库库AI、豆包工作怎么选

AI Agent是一种能感知环境、自主决策并执行动作的智能系统,其核心在于工具调用、状态管理与错误恢复构成的执行闭环。在办公场景中,任务边界清晰、容错率高、重复性强,使Agent成为最容易落地的方向。通过调用本地文件、脚本或办公套件,Agent能自动完成文件批量处理、文档摘要、会议纪要等重复劳动,显著提升工作效率。目前WorkBuddy、千问办公、库库AI、豆包工作等产品分别从本地操作、办公套件嵌入、知识处理、轻量助手等路线切入,用户可根据自身场景选择。

weixin_29052717的博客 528

Vuex步骤与使用

什么是vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理器。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。他使数据流通更加方便快捷,避免了很多冗余的业务逻辑,不用在组件中重复的去定义。一般在开发中大型项目的时候会用到vuex,小型项目开发用起来会有些麻烦。 vuex的理解 Vuex采用MVC模式中的Model层,规定所有的数据必须通过action—>mutaion—>state这个流程进行来改变状态的。再结合Vue的数据视图双向绑定

weixin_46322583的博客 530

Cesium 实战 26 - 自定义纹理材质 - 箭头流动线(图片纹理)

Cesium 实战 - 自定义纹理材质 - 箭头流动线(图片纹理)。

非科班Java出身GISer的博客 1405

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

vue和react的区别

React: 他是facebook创建的javascriptUi框架,React与当时流行的jquery等不同,React推广了 Virtual DOM( 虚拟 DOM )并创造了 JSX 语法。JSX 语法的出现允许我们在 javascript 中书写 HTML 代码。 VUE .js: 解决问题跟react一致,但是他提供了另外一种方案,VUE .js的模板系统就是普通的html,css,js页面,淡化了jsx写法,这样更直观,因其实模板系统都是用的普通的 HTML,所以对应用的升级更方便、更容易,而

qq_43631418的博客 1914

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

Vuex中发送mock请求返回数据

vuex像是一个仓库,可以将需要传递的数据放进去,使用的时候再取出来。

weixin_44348028的博客 5690

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 949

vuex 封装请求

因为我这里对store进行了抽离所以有提取的方法有点不一样;其他都是一样的 如果看不懂抽离;可以查看这篇文章 https://blog.youkuaiyun.com/qq_40190624/article/details/100087775 vuex中的数据 departmentCategory.js // 请求部门分类列表 import axios from 'axios' const stat...

周家大小姐 1225

实战落地!Python抓取股票历史数据:开盘/收盘/成交量全维度爬取(附数据清洗+可视化)

股票历史数据抓取的核心是“数据准确性+完整性”,网页爬取适合小批量、个性化需求,API调用适合批量、标准化需求。多市场数据抓取:适配港股(00700.HK)、美股(AAPL)的抓取逻辑;高频数据抓取:抓取分钟级、小时级行情数据,用于短线量化策略;财务数据扩展:抓取市盈率、市净率、净利润等财务指标,结合价格数据做基本面分析;量化策略回测:将清洗后的数据接入Backtrader、VNPY等量化框架,验证策略有效性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1740

vuex+axios发送请求

方法一:改写原型链 首先在main.js中引入axios import axios from 'axios' 其他组件无法使用axios命令,将axios改写为vue的原装属性 Vue.prototype.$ajax = axios 在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $ajax 命令 this.$ajax.post('/api/v1/repair/typelist') .then(function(res){ }) .catch(fun

qq_42337039的博客 816

一次请求穿过的六道关卡:微服务基础组件的通信与IO、事件驱动、负载均衡、服务路由、API网关与配置协调

微服务的稳定性往往取决于看不见的基础组件。本文跟随一次下单请求,依次穿过API网关、服务路由、负载均衡与服务通信,再沿事件分支扇出,并从控制面审视配置中心。通信层剖析握手成本、连接复用、epoll与主从Reactor、心跳判活、退避抖动、截止时间与重试预算;事件层讲解编舞与编排、事务发件箱和幂等消费;均衡与路由对比静态与动态算法、路由链、全链路灰度与同区保底;网关讨论过滤器链与限流算法;配置部分给出四类配置、长轮询与共识协调,最后归纳五道防线。文中关键数据均来自可在Java8运行的演示程序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【vue】vuex实现组件间数据共享 & vuex模块化编码 & 网络请求

本文介绍了如何在Vue.js项目中使用Vuex进行组件间数据共享,并通过模块化和命名空间的方式优化代码结构。首先,通过创建Count和Person组件,展示了如何在Vuex中定义state、mutations、actions和getters来实现数据共享。接着,针对大型项目中Vuex模块可能变得臃肿的问题,提出了将不同功能模块化的解决方案,即将每个功能的actions、mutations、state、getters封装成独立对象,并在Vuex.store中进行模块化暴露。

2301_80636070的博客 1291

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

vuex结合axios异步请求数据的封装

首先, 概括下 vuex基本使用流程为: 在action中分发异步请求, 在异步回调中提交mutation,在mutation中修改state, 使用getters对state的值进行计算封装. 为了能够很好的隔离页面view视图与数据的请求, 同时在使用vuex的action分发异步请求后,能够接收回调,进行了以下封装: 一. http的封装 http模块包含3个文件,config...

weixin_39910802的博客 1362

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最详细的axios+vuex请求封装以及使用实例

极力推荐的axios+vuex的二次封装以及使用方式,

小猿同学628的博客 5394

actions vuex 请求_Vuex Actions的一次异步请求

Actions根据流程图得知,actions是接受后端api的,进行异步请求,获取到的数据 要通过commit提交给mutation,mutation才能修改state中的数据,案例: 请求卖座的api 通过action1,首先先判断页面是否拥有数据,没有的话,使用action进行异步请求if(this.$store.state.cinemaList.length === 0 ){//vuex 异...

weixin_39607873的博客 587

vue + axios + vuex 封装请求

目录vue + axios + vuex 封装请求axios封装请求 post get等vuex 结合 axios的封装第一步:api / index.js 请求方法第二步:store / state.js第三步:store / actions.js第四步:store / mutation-type.js第五步:store / mutations.js第六步:在组件之中使用 vue + axios + vuex 封装请求 安装:npm i axios axios封装请求 post get等 api

weixin_47409897的博客 631

vue 当多个页面都有同一个请求时 可以利用vuex存储请求的结果 减少请求

vue 当多个页面都有同一个请求时 可以利用vuex存储请求的结果 第一步:把异步请求写在actions中,而修改state的状态只能在mutations中,所以需要在action中需要把请求回来的结果提交mutations修改state的状态。 // mine.js // 引入axios import { myRequest } from '../.././router/axios' const mine = { namespaced: true, //开启命名空间 state: {

qq_41287158的博客 1062
上一篇: Vue实例的生命周期及钩子函数
下一篇: SpringBoot-使用心跳机制+JWT实现用户实时在线数统计
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值