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.hqwc.cn/news/513183.html

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

相关文章

C语言——结构体(位段)、联合体、枚举

hello&#xff0c;大家好&#xff01;我是柚子&#xff0c;今天给大家分享的内容是C语言中的自定义类型结构体、联合体以及枚举&#xff0c;有什么疑问或建议可以在评论区留言&#xff0c;会顺评论区回访哦~ 一、结构体 struct a.结构体声明 不同于数组的是&#xff0c;结构…

字节同事问我:我的Postman为什么连不了数据库?

postman本身没有数据库连接功能&#xff0c;所以用到了node.js中的xmysql实现Rest API的生成&#xff0c;利用postman进行请求&#xff0c;获取需要的数据&#xff0c;来做数据准备或断言。 1 安装 安装node.js&#xff1a;要求版本大于等于7.6 首先保证你的环境上有node.js…

Claude3发布,ChatGPT-4 跌下神坛!兄弟相残?

就在3月5号凌晨&#xff0c;大家还在睡梦中的时候&#xff0c;Anthropic在X上低调的发布了Claude3&#xff0c;没有华丽的辞藻&#xff0c;没有大篇幅的介绍&#xff0c;只是简单的发了个帖子...... 几行简单的文字&#xff0c;浓缩着其一年多来的努力~ 真是让人不禁感叹&…

稀碎从零算法笔记Day5-LeetCode:多数元素

题型&#xff1a;数组、计数、排序、STL函数、查找众数 链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 题目描述 给定一个大小为 n …

#WEB前端(JS基础语法)

1.实验&#xff1a; 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; &#xff08;1&#xff09;数据类型 var&#xff0c;let&#xff0c;const var,let声明变量&#xff0c;const声明常量。var声明的变量具有函数作用域,let声明的变量具有块级作用域&#xff0c;let跟安全更…

NVMe管理命令为何不用SGL?-2

在IO数据传输中&#xff0c;是否选择SGL可以根据自身场景的需要。SGL提供的是一种高效且灵活的方式来描述非连续的内存区域&#xff0c;这对于现代高性能存储系统至关重要&#xff0c;尤其是在处理大数据块或者随机小I/O操作时具有明显优势&#xff1a; 高效的数据传输&#xf…

二叉树的深搜题解析

文章目录 前言计算布尔二叉树的值求根节点到叶节点数字之和解析代码 二叉树剪枝解析代码 验证二叉搜索树解析代码 二叉搜索树中第K小的元素代码 二叉树的所有路径解析代码 前言 大家好我是jiantaoyab&#xff0c;在这里分享给大家二叉树深搜相关题目的练习和解析&#xff0c;通…

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024)

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议&#xff08;AHPCAI 2024&#xff09; 2024 International Conference on Algorithms, High Performance Computing and Artificial Intelligence 2024算法、高性能计算与人工智能国际学术会议&#xff08;AH…

使用java的Stream流进行Collectors.groupingBy分组后生成Map,对Map进行删除原集合是否会发生改变

在Java中&#xff0c;当我们使用Collectors.groupingBy方法对集合进行分组操作时&#xff0c;生成的新映射&#xff08;Map&#xff09;是基于原始集合&#xff08;allItems&#xff09;的数据结构和内容创建的。这意味着&#xff0c;如果你更改了新的映射allItemMap中的值&…

车牌定位识别企业版

车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;采用YOLOV8NANO检测车牌区域&#xff0c;然后使用PADDLE OCR检测车牌&#xff0c;能识别各国车牌&#xff0c;支持C,PYTHON开发 车牌定位识别企业版&#xff0c;只需要OPENCV&#xff0c;支持C,python

力扣大厂热门面试算法题 - 动态规划

爬梯子、跳跃游戏、最小路径和、杨辉三角、接雨水。每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.05 可通过leetcode所有测试用例。 目录 70. 爬楼梯 解题思路 完整代码 Python Java 55. 跳跃游戏 解题思路 完整代码 Python 代码…

RabbitMQ如何实现消费端限流

什么是消费端限流&#xff0c;这个一种保护消费者的手段&#xff0c;假如说&#xff0c;现在是业务高峰期了&#xff0c;消息有大量堆积&#xff0c;导致MQ消费需要不断的进行消息消费&#xff0c;很容易被打挂&#xff0c;甚至重启之后还是会被大量消息涌入&#xff0c;继续被…