VUEX的基础使用存值及异步

目录

什么是VUEX

 有什么作用

 安装

取值

异步


什么是VUEX

VUEX 是一个用于状态管理的状态容器模式(state management pattern)库,用于 Vue.js 应用程序。它允许你在应用程序中集中管理和共享状态,并提供了一组用于更改状态的规则。VUEX 的核心概念包括 store(仓库)、state(状态)、mutations(变动)和 actions(动作)。通过 VUEX,你可以更方便地跟踪和调试状态变化,以及在不同组件之间共享状态。无论是大型还是小型的 Vue.js 应用程序,VUEX 都可以帮助你更好地组织和管理应用程序的状态。

 有什么作用

  1. 集中管理状态:VUEX 提供了一个全局的状态容器(store),将应用程序的状态集中存储在一个地方。这样,多个组件可以共享和访问同一个状态,避免了组件之间状态传递的复杂性。

  2. 状态共享:VUEX 允许你在应用程序的不同组件之间共享状态。这意味着,一个组件的状态变化可以被其他组件感知到,并相应地做出更新。这种状态共享可以简化组件之间的通信,提高代码的可维护性。

  3. 易于跟踪和调试状态变化:VUEX 记录了状态的变化历史,使得你可以轻松地跟踪和调试状态的变化。这对于定位和解决状态相关的问题非常有帮助。

  4. 快速的状态更新:通过定义 mutations 和 actions,VUEX 提供了一种统一且可控的方式来更新状态。这样可以确保状态的变化是可追踪和可测试的,也提供了对状态变化的约束和限制。

总之,VUEX 使得在 Vue.js 应用程序中管理和共享状态变得更加简单和高效,提高了应用的可维护性和可扩展性。 

取值

思维图 

 安装

输入以下命令来安装Vuex:

 npm install vuex -S   (node的环境配置为10的执行这个命令)

 npm i -S vuex@3.6.2  (node的环境配置为18的执行这个命令)

 

 package.json中有这些代码就代表安装成功了

 

菜单栏

在src中创建一个vuex的目录,在改目录下创建两个组件demo1,demo2 

demo1

<template><div style="padding: 60px;"><h1>我是第一个</h1><p>改变state中的值</p>请输入:<input v-model="msg" /><button @click="fun1">获取state</button><button @click="fun2">改变state</button><button @click="fun3">获取state</button><button @click="fun4">请求后台</button></div>
</template><script>export default {data() {return {msg: '默认值'}},methods: {fun1() {// this.$store-->store/index.js 不推荐let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduNameAsync', {eduName: this.msg})},fun4() {this.$store.dispatch('setEduNameByAjax', {eduName: this.msg,_this:this})}}}
</script><style>
</style>

demo2

<template><div><h1>我是第二个</h1>{{eduName}}</div>
</template><script>export default{data(){return{msg:'默认值'}},computed:{eduName(){return this.$store.state.eduName;// return this.$store.getters.getEduName;}}}
</script><style>
</style>

 到项目中src的router的index.js文件中配置路径

import demo1 from '@/views/vuex/demo1'
import demo2 from '@/views/vuex/demo2'{path: '/vuex/demo1',name: 'demo1',component: demo1},{path: '/vuex/demo2',name: 'demo2',component: demo2}

在src中的components的LeftNav.vue组件中编辑(增加)代码 

<el-submenu index="idx_999" key="key_999"><template slot="title"><span>vuex管理</span></template><el-menu-item index="/vuex/demo1" key="key_99901"><span>页面1</span></el-menu-item><el-menu-item index="/vuex/demo2" key="key_99902"><span>页面2</span></el-menu-item></el-submenu>

模块

state.js

export default{eduName:'沸羊羊课堂开课啦',
}

getters.js 

export default{setEduName:(state)=>{return state.eduName;}
}

 mutations.js

export default{setEduName:(state,payload)=>{state.eduName = payload.eduName;}
}

 index.js

 import Vue from 'vue'import Vuex from 'vuex'import state from './state'import getters from './getters'import actions from './actions'import mutations from './mutations'Vue.use(Vuex)const store = new Vuex.Store({state,getters,actions,mutations})export default store

 引用

在mian.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'
//开发坏境才会引入mockjs
// process.env.MOCK && require('@/mock')
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App'
import router from './router'
import store from './store'Vue.use(ElementUI)
Vue.config.productionTip = falseimport axios from '@/api/http'
import VueAxios from 'vue-axios'Vue.use(VueAxios,axios)/* eslint-disable no-new */
new Vue({el: '#app',router,store,data(){return{Bus:new Vue()}},components: { App },template: '<App/>'
})

取值

<template><div style="padding: 60px;"><h1>我是第一个</h1><p>改变state中的值</p>请输入:<input v-model="msg" /><button @click="fun1">获取state</button><button @click="fun2">改变state</button><button @click="fun3">获取state</button><button @click="fun4">请求后台</button></div>
</template><script>export default {data() {return {msg: '默认值'}},methods: {fun1() {// this.$store-->store/index.js 不推荐let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduNameAsync', {eduName: this.msg})},fun4() {this.$store.dispatch('setEduNameByAjax', {eduName: this.msg,_this:this})}}}
</script><style>
</style>

异步

demo1

<template><div style="padding: 60px;"><h1>我是第一个</h1><p>改变state中的值</p>请输入:<input v-model="msg" /><button @click="fun1">获取state</button><button @click="fun2">改变state</button><button @click="fun3">获取state</button><button @click="fun4">请求后台</button></div>
</template><script>export default {data() {return {msg: '默认值'}},methods: {fun1() {// this.$store-->store/index.js 不推荐let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduNameAsync', {eduName: this.msg})},fun4() {this.$store.dispatch('setEduNameByAjax', {eduName: this.msg,_this:this})}}}
</script><style>
</style>

demo2

<template><div><h1>我是第二个</h1>{{eduName}}</div>
</template><script>export default{data(){return{msg:'默认值'}},computed:{eduName(){return this.$store.state.eduName;// return this.$store.getters.getEduName;}}}
</script><style>
</style>

 在src的action.js中配置后台请求的地址

   'VUEX_AJAX': '/vuex/queryVuex', //Vuex的后台异步请求

在src的store模块中编写actions.js

 export default {setEduNameByAsync: function(context, payload) {setTimeout(() => {//这里的setEduName(事件类型)是指mutations.js中的setEduName事件context.commit('setEduName', payload);}, 10000);//10000是指10秒之后执行这个事件},setEduNameByAjax: function(context, payload) {let _this=payload._this;//定义后端都请求地址let url = _this.axios.urls.VUEX_AJAX;let params = {resturantName: payload.eduName}_this.axios.post(url, params).then(r => {console.log(r);}).catch(e => {console.log(e);});}}

效果图展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[安洵杯 2019]easy_web - RCE(关键字绕过)+md5强碰撞+逆向思维

[安洵杯 2019]easy_web 1 解题流程1.1 阶段一1.2 阶段二2 思考总结1 解题流程 1.1 阶段一 1、F12发现提示md5 is funny ~;还有img标签中,有伪协议和base64编码 2、url地址是index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=   这就有意思了,这里的img明显是编码后的…

C++ 命名空间-----namespace(超详细解析,小白必看系列)

目录 一、前言 &#x1f34e;什么是C 二、关键字 三、命名空间&#xff08;重点&#xff09; &#x1f350;C语言--命名冲突 &#x1f349;C--命名空间的定义 &#x1f353;C--命名空间的使用 四、C输入&输出 五、共勉 一、前言 既博主学过C语言后又一新的语言&a…

大厂设计师力推的14款平面图设计工具!

从事设计行业的工人或多或少会接触到平面图。例如&#xff0c;在建造新房、办公室、酒店等任何类型的建筑时&#xff0c;都需要使用平面图来保证项目的准确性。因此&#xff0c;掌握绘制平面图软件的技巧也非常重要。在保证效率的同时&#xff0c;结果的准确性也非常高。在本文…

seata分布式事务理论概述

分布式事务产生的原因&#xff1a; 数据库分库分表 应用的SOA化。就是业务的服务化(面向服务架构) 分布式事务的解决方案&#xff1a; 1、两阶段提交协议2PC 这里的两阶段提交和redolog binlog的两阶段提交不是一个东西&#xff0c;redo log和bin log的两阶段提交保证的是…

Vue2 Watch的语法

Watch语法 一、监听普通数据类型&#xff08;1&#xff09;把要监听的msg值看作方法名&#xff0c;来进行监听。&#xff08;2&#xff09;把要监听的msg值看作对象&#xff0c;利用hanler方法来进行监听 二、监听对象&#xff1a;&#xff08;1&#xff09;监听对象需要用到深…

Python算法练习 10.11

leetcode 394 字符串解码 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没…

ubuntu 23.04安装中文输入法

使用ubuntu 23.04安装中文输入法&#xff0c;尝试了最新的搜狗&#xff0c;谷歌拼音&#xff0c;fcitx的原始拼音&#xff0c;最终的结果就是使用了谷歌拼音。 搜狗输入法&#xff1a;好用&#xff0c;但是用了没几天发现各种闪退&#xff0c;一打开就闪烁&#xff0c;根本无法…

c语言练习85:通讯录的实现(基于顺序表实现)

通讯录的实现(基于顺序表实现&#xff09; 基于动态顺序表实现通讯录 C语⾔基础要求&#xff1a;结构体、动态内存管理、顺序表、⽂件操作 1、功能要求 1&#xff09;⾄少能够存储100个⼈的通讯信息 2&#xff09;能够保存⽤⼾信息&#xff1a;名字、性别、年龄、电话、地址…

飞凌嵌入式受邀参加「NXP创新技术论坛」

2023年10月10日&#xff0c;「NXP创新技术论坛」在深圳湾万丽酒店举行&#xff0c;飞凌嵌入式作为NXP金牌合作伙伴受邀参加此次论坛&#xff0c;与众多智能工业行业的伙伴深入交流市场趋势与行业洞察&#xff0c;共同促进未来市场的发展。 本次论坛&#xff0c;飞凌嵌入式展示了…

docker版jxTMS使用指南:数据采集系统的高可用性

本文讲解4.6版jxTMS中数据采集系统的高可用性&#xff0c;整个系列的文章请查看&#xff1a;4.6版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版升级内容 4.2版jxTMS的说明&#xff…

大数据学习(3)-hive分区表与分桶表

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

Hive中生成自增序列的常用方法

在日常业务开发过程中&#xff0c;通常遇到需要hive数据表中生成一列唯一ID&#xff0c;当然连续递增的更好。 最近在结算业务中&#xff0c;需要在hive表中生成一列连续且唯一的账单ID&#xff0c;于是就了解生成唯一ID的方法 1. 利用row_number函数 语法&#xff1a;row_n…

ansible 调研

参考&#xff1a;自动化运维工具——ansible详解&#xff08;一&#xff09; - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xf…

使用Plotly模拟远古博弈游戏_掷骰子

不乏投资大师、量化基金经理从着迷博弈游戏开始迈出步伐...... 开始学习使用python包Plotly模拟掷骰子。 安装Plotly 终端输入命令&#xff1a;python3 -m pip install --user plotly 创建骰子类 掷骰子 分析结果 绘制直方图 投掷一个骰子点数的分布 投掷两个骰子1000次的点数…

【QT】Ubuntu 编译安装 QT 5.12.7 源码

直接通过源码来编译安装 QT&#xff0c;难度太大&#xff0c;耗时较长&#xff0c;一般不是特别推荐使用源码安装。 目录 1、下载 QT 源码包 2、搭建安装环境(下载依赖库) 3、编译QT源码的脚本 1、下载 QT 源码包 QT5.12.7源码下载地址: download | QT 5.12.7 选择任意一…

spring boot+ vue+ mysql开发的一套厘米级高精度定位系统源码

UWB室内高精度定位系统源码&#xff0c;自主版权演示 UWB技术最核心的能力就是精准的定位与测距&#xff0c;当然它还具备通信功能。不过&#xff0c;目前主流通信技术已经相当成熟&#xff0c;无需UWB兼顾去做通信传输。而且&#xff0c;如果使用UWB通信功能&#xff0c;反而会…

多媒体播放软件 Infuse mac中文特点介绍

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

奖励最顶尖的 K 名学生 (2512.leetcode,Java中sort的巧妙lambda使用)-------------------Java实现

奖励最顶尖的 K 名学生 &#xff08;2512.leetcode&#xff0c;Java中sort的巧妙lambda使用&#xff09;-------------------Java实现 题目表述 给你两个字符串数组 positive_feedback 和 negative_feedback &#xff0c;分别包含表示正面的和负面的词汇。不会 有单词同时是正…

【Doris实战】Apache-doris-2.0.2部署帮助手册

Apache-doris-2.0.2部署帮助手册 校验时间&#xff1a;2023年10月11日 文章目录 Apache-doris-2.0.2部署帮助手册安装前准备安装包安装要求Linux 操作系统版本需求软件需求句柄需求关闭 Swap网络需求 部署规划用户规划目录规划免密需求 安装步骤配置JDK配置Doris文件 启动与停止…