Vue开发实例(八)Vuex状态管理store

Vuex状态管理store

  • 一、Vuex的安装与配置
  • 二、store使用方法
    • 1、基础使用
    • 2、提交变更
    • 3、getters使用
    • 4、在其他页面(组件)中显示
    • 5、modules多模块

做vue项目的时候, store状态管理器可以帮助我们完成一些数据的存储和管理,通俗理解是存储在store里的都是全局变量,可以通过方法提交更新,其他页面和组件也会同步更新,拿到最新的值。

一、Vuex的安装与配置

方法描述
state状态树:定义需要管理的数组、对象、字符
getters类似计算属性,当需要从store的state中派生出一些状态,就需要使用getter,getter会接受state作为第一个参数,而getter的返回值会根据它的依赖缓存起来,只有getter中的依赖值发生改变才回重新计算。
mutation更改store中state状态的唯一方法就是提交mutation。每个mutation都有一个字符串类型的事件和一个回调函数,我们需要改变state的值就要在回调函数中改变。我们要执行这个回调函数,那么我们需要执行一个相应的调用方法:store.commit
  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到更新。
  2. 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit)mutation。
  1. 安装vuex支持
npm install vuex --save

注意:
Vue 3 匹配 Vuex 4

npm install vuex@4 --save

Vue 2 匹配 Vuex 3

npm install vuex@3 --save

卸载vuex

npm uninstall vuex --save
  1. 在src下创建store文件夹,建立store/index.js --> 在 index.js 中引入vue 和 vuex
    • 引入vue 和 vuex,并使用 Vue.use(Vuex) 【☆☆☆☆☆】
    • 创建state和mutations
    • export导出Vuex.Store 实例

初始代码

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const state = {username: '牛牛',
}
const mutations = {setUser(state, name) {state.username = name},
}
export default new Vuex.Store({state,mutations
})
  1. 在main.js配置,这样就可以全局引入了,省的每个要使用的页面单独在引入。
import Vue from 'vue'
import App from './App.vue'import VueRouter from 'vue-router';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from './router/index.js';
import axios from 'axios';import './mock/index.js';
import '@/assets/css/global.css';
import store from './store/index.js';Vue.config.productionTip = false;
Vue.prototype.$axios =axios;
Vue.use(ElementUI);
Vue.use(VueRouter);new Vue({router,store,render: h => h(App),
}).$mount('#app')

二、store使用方法

1、基础使用

语法:$store.state.XXX(XXX属性名)

页面代码,我是以Main2.vue作为基础操作的

<template><div><span>这是Main2</span><br /><br /><h1>{{ $store.state.username }}</h1></div>
</template><script>
export default {name: "Main2",
};
</script><style scoped>
</style>

页面效果
在这里插入图片描述

2、提交变更

使用方法 commit ,语法如下:

this.$store.commit('提交方法名',数据);

在store.js中一个状态字段 userState 和提交的方法 setUserState
在这里插入图片描述
页面代码修改

<template><div><span>这是Main2</span><br /><br /><h1>{{ $store.state.username }}</h1><br />数据状态:{{ $store.state.userState }}<el-button @click="addState">状态+1</el-button></div>
</template><script>
export default {name: "Main2",methods: {addState() {this.$store.commit("setUserState", 1);},},
};
</script><style scoped>
h1,
.el-button {height: auto;
}
</style>

页面效果
在这里插入图片描述

3、getters使用

对数据进行修饰,比如上例中的用户状态,我们假设如下:
0 :无效
1 :1级
2 :2级

store/index.js 增加getters进行数据的修饰并导出getters,全部代码如下:

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const state = {username: '牛牛',userState: 0
}
const mutations = {setUser(state, name) {state.username = name},setUserState(state, data) {state.userState += data},
}
const getters = {getUserState(state) {let data;if (state.userState == 0) {data = '无效'} else {data = state.userState + '级'}return data;}
}export default new Vuex.Store({state,mutations,getters
})

页面代码修改
在这里插入图片描述

页面效果
在这里插入图片描述

4、在其他页面(组件)中显示

直接在footer 页面加入显示即可
数据状态:{{$store.state.userState}}

<template><div>store/index.js 来的数据:{{ $store.state.userState }}</div>
</template><script>
export default {name: "Footer",
};
</script><style scoped>
</style>

更新state中的状态时都会同步更新:
在这里插入图片描述

5、modules多模块

  1. 在store下创建文件夹 module ,并建立两个文件 moduleA.js moduleB.js
    在这里插入图片描述

  2. moduleA.js 定义state 的username 为 module_a_user,同理,moduleB.js为 module_b_user

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {username: "module_a_user"},mutations: {},getters: {}
})
  1. 在store.js中创建modules并导出
    在这里插入图片描述
  2. 代码示例
import Vue from 'vue'
import Vuex from 'vuex'
import moduleA from './module/moduleA.js';
import moduleB from './module/moduleB.js';Vue.use(Vuex)const state = {username: '牛牛',userState: 0
}
const mutations = {setUser(state, name) {state.username = name},setUserState(state, data) {state.userState += data},
}
const getters = {getUserState(state) {let data;if (state.userState == 0) {data = '无效'} else {data = state.userState + '级'}return data;}
}const modules = {a:moduleA,b:moduleB
}export default new Vuex.Store({state,mutations,getters,modules
})

页面使用:
语法:$store.state.模块名.字段名

module用户a:{{$store.state.a.username}}
<br>
module用户b:{{$store.state.b.username}}

页面效果
在这里插入图片描述
操作全部代码,仅供参考

Main2.vue参考代码

<template><div><span>这是Main2</span><br /><br /><h1>{{ $store.state.username }}</h1><br />数据状态:{{ $store.state.userState }}<el-button @click="addState">状态+1</el-button><br /><br />计算数据状态:{{ $store.getters.getUserState }}<br /><br />module用户a:{{ $store.state.a.username }}<br />module用户b:{{ $store.state.b.username }}</div>
</template><script>
export default {name: "Main2",methods: {addState() {this.$store.commit("setUserState", 1);},},
};
</script><style scoped>
h1,
.el-button {height: auto;
}
</style>

store/index.js代码在5.4小节中已经全部提供,往上翻一下
store/module/moduleA.js代码在5.2小节中已经全部提供,往上翻一下


Vuex状态管理store的用法就介绍到这啦~~

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

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

相关文章

如何将任何文本转换为概念图(GC)

原文地址&#xff1a;how-to-convert-any-text-into-a-graph-of-concepts 使用 Mistral 7B 将任何文本语料库转换为知识图的方法 2023 年 11 月 10 日 使用递归 RAG 方法来实现具有多跳推理的 QnA&#xff0c;以回答基于大型文本语料库的复杂查询。 知识图增强生成与递归 R…

ResNet的特点?BN层的目的?模型验证的时候可以用BN吗?

ResNet&#xff08;残差神经网络&#xff09; 残差思想&#xff1a;主要目的是为了解决深度神经网络训练过程中的梯度消失和梯度爆炸问题&#xff0c;同时帮助网络更好地学习到特征表示&#xff0c;突出微小的变化&#xff0c;提高网络的性能和泛化能力。从而突出微小的变化 …

unity-urp:视野雾

问题背景 恐怖游戏在黑夜或者某些场景下&#xff0c;需要用雾或者黑暗遮盖视野&#xff0c;搭建游戏氛围 效果 场景中&#xff0c;雾会遮挡场景和怪物&#xff0c;但是在玩家视野内雾会消散&#xff0c;距离玩家越近雾越薄。 当前是第三人称视角&#xff0c;但是可以轻松的…

Python 的闭包,你知道多少?一起聊聊

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 一、前言 看到了很多函数套函数的函数&#xff0c;总之对于 Java 的…

Java 继承、接口与抽象类教程

Java 继承、接口与抽象类教程 在Java编程中&#xff0c;继承、接口和抽象类是面向对象编程&#xff08;OOP&#xff09;的三大核心概念。它们提供了代码重用、多态性和扩展性的基础。本教程将详细解释这三个概念&#xff0c;并通过示例展示如何在Java中使用它们。 一、继承 …

android so载入过程

源自android 9 看源代码的网页 /bionic/libdl/libdl_static.c 好像没用。都是空的 /bionic/libdl/libdl.cpp 主角 22// These functions are exported by the loader 23// TODO(dimitry): replace these with reference to libc.so101// Proxy calls to bionic loader 102_…

工具方法 - 任务跟踪清单

1&#xff0c;先创建Primary Task&#xff0c;不要超过三条。重要的工作任务&#xff0c;一些约好的活动等。 2&#xff0c;再创建Secondary Task&#xff0c;不要超过两条。一些学习任务&#xff0c;杂事琐事等。 3&#xff0c;任务跟踪周期为一周&#xff0c;每日早晚更新状态…

LeetCode | 搜索插入位置

Problem: 35. 搜索插入位置 文章目录 思路解题方法复杂度Code 思路 用python对列表特有的操作——index。 解题方法 见上 复杂度 时间复杂度: O(n) 空间复杂度: O(1) Code class Solution:def searchInsert(self, nums: List[int], target: int) -> int:try:return …

【C++】十大排序算法之 归并排序 快速排序

本次介绍内容参考自&#xff1a;十大经典排序算法&#xff08;C实现&#xff09; - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序…

力扣--滑动窗口438.找到字符串中所有字母异位词

思路分析&#xff1a; 使用两个数组snum和pnum分别记录字符串s和p中各字符出现的次数。遍历字符串p&#xff0c;统计其中各字符的出现次数&#xff0c;存储在pnum数组中。初始化snum数组&#xff0c;统计s的前m-1个字符的出现次数。从第m个字符开始遍历s&#xff0c;通过滑动窗…

史上最细,接口自动化测试用例设计编写总结,一篇带你打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 说到自动化测试&a…

ArrayList 和 LinkedList 的区别

ArrayList ArrayList 是基于动态数组实现的&#xff0c; 它使用一块连续的内存空间来存储元素&#xff0c;因此访问元素的速度非常快&#xff08;时间复杂度为 O(1)&#xff09;&#xff0c; 但是&#xff0c;在插入或删除元素时&#xff0c;如果位置不在数组末尾&#xff0…

亚信安慧AntDB:“融合+实时”引领数据库创新

在当今多变的数据应用场景中&#xff0c;AntDB作为行业领先的超融合流式实时数仓&#xff0c;秉承着“融合实时”的研发理念&#xff0c;全面应对企业日益复杂的数据处理需求。通过SQL接口访问多种执行引擎&#xff0c;AntDB在实现交易、分析等多重能力的“超融合”方面取得了显…

SQL设计时增加说明列

后关闭sql Studio,然后打开注册表,注册表地址: 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\SQL Server Management Studio\18.0_IsoShell\DataProject 如有版本不同,红色内容有所变化,修改内容如下: SSVPropViewColumnsSQL70,SSVPropViewColumnsSQL80 全修改为 1,2,6,7…

魔方,3循环是你的秘密[嗑瓜子]。​

引理1.任意Sn中的元素&#xff1a;(N_1N_2N_3...N_m) 证明&#xff1a; (N_1N_2N_3...N_m) (N_1N_m)(N_1N_m-1)...(N_1N_2) 举例&#xff1a; 比如(1234) (14)(13)(12) (3214) (34)(31)(32) 2.任意An可以表示成3循环的乘积&#xff0c; 证明&#xff1a; 1.An中的元素属于…

sql | 左连接、右连接、内连接、全连接

其实这个内容算是老掉牙了 左连接、右连接、内连接、全连接从字面上都好理解 接下来我们来一一解疑 左连接&#xff1a;以左表为主表&#xff0c;根绝条件匹配右表&#xff0c;当右表部分记录因为条件不匹配显示为空&#xff0c;所以最终结果是左表全显示&#xff0c;右表存在字…

抖店无货源模式,采购商品、平台渠道正规吗?相关基础问题解答

我是王路飞。 无货源模式&#xff0c;相信你们也都不陌生了。 每个电商平台都存在这种模式&#xff0c;且我以为&#xff0c;每个电商平台的发展壮大&#xff0c;最应该感谢的就是这些无货源商家了。 而现在说到无货源&#xff0c;最适合普通人的无疑就是抖音小店了。 今天…

[云原生] k8s之存储卷

一、emptyDir存储卷 当Pod被分配给节点时&#xff0c;首先创建emptyDir卷&#xff0c;并且只要该Pod在该节点上运行&#xff0c;该卷就会存在。正如卷的名字所述&#xff0c;它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件&#xff0c;尽管该卷可以挂载到每…

汽车上的各种质量:整备质量、总质量、装载质量、簧上质量、簧下质量

文章目录 前言一、整备质量二、额定总质量三、额定装载质量四、簧上质量五、簧下质量总结 前言 一、整备质量 整备质量指的是汽车按照出厂技术条件完全配备&#xff08;包括备胎、工具、各种油水等&#xff09;的质量。汽车的整备质量也就是人们常说的一辆汽车的自重&#xf…

快速提高 Python 爬虫的效率和稳定性

为了提高Python爬虫的效率和稳定性&#xff0c;需要综合考虑多个方面&#xff0c;包括优化网络请求、合理设计爬取策略、处理异常情况、使用合适的工具和库等。以下是一些详细的技术和方法&#xff0c;帮助大家快速提高Python爬虫的效率和稳定性。 1. 网络请求优化 异步请求 …