示例代码请访问我的GitHub: github.com/chencl1986/…
该节教程代码可通过npm start运行devServer,在http://localhost:8080/查看效果
Vuex简介
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex具有以下特点:
- 全局 Vuex类似于一个全局变量,它在整个Vue应用中生效。
- 统一 只要状态修改,都会自动通知到所有相关组件,不需要使用者主动推送。
- 单一 在全局中只需要保存一份,即可在全局中使用。
Vuex解决了哪些问题:
- 数据跨组件共享,数据的传输不再受到父子级限制,可以在各级组件中任意获取。
- 防止数据被意外篡改,Vuex会记录数据被修改的详细信息,如修改状态的组件、时间、代码位置等,便于定位和追踪错误,同时也方便了调试和测试。
Vuex的状态管理示意图详解
Vuex的使用
代码示例:/lesson20/src/main.js
先使用vue-cli创建一个项目,之后使用npm install vuex --save安装Vuex,就可以在/src/main.js中配置Vuex:
// 1. vuex-引入
import Vuex from 'vuex'// vue-cli自带的编译配置
Vue.config.productionTip = false// 1. vuex-在Vue中使用Vuex,让Vuex中的操作挂载到Vue中。
Vue.use(Vuex)// 3. vuex-声明store对象
const store = new Vuex.Store({strict: process.env.NODE_ENV !== 'production', // 严格模式:防止直接修改state,只能用Mutations操作,由于strict模式是通过对象深度匹配进行,生产模式打开会严重影响性能。state: {a: 12, b: 5}, // 核心:数据mutations: { // 定义Mutations},actions: { // 定义actions},getters: {}, // 类似于computedmodules: {} // 将store拆分成多个命名空间,分开使用。
})/* eslint-disable no-new */
new Vue({el: '#app',router,store, // 将store挂载到Vue实例中。components: { App },template: ''
})
读取state的值
代码示例:/src/components/Index.vue
在Index.vue中可以通过$store.state.a读取到已定义的a的值。
a: {{
$store.state.a}}
"fields" :datas="datas" :parent="this"/>
修改state的值
接下来实现在Cmp1.vue组件中,点击按钮后修改state中的a的值。
代码示例:/src/components/Cmp1.vue
"html">"">type="button" value="+5" @click="fn()">
在main.js中定义Actions和Mutations。
代码示例:/lesson20/src/main.js
const store = new Vuex.Store({strict: process.env.NODE_ENV !== 'production', // 严格模式:防止直接修改state,只能用Mutations操作,由于strict模式是通过对象深度匹配进行,生产模式打开会严重影响性能。state: {a: 12, b: 5}, // 核心:数据mutations: { // 定义Mutations,通过action触发并更新state,Vue Devtool可以监听到数据的修改情况。add (state, n) { // 第一个参数为旧state,第二个参数为action中commit传入的参数。state.a += n}},actions: { // 定义actions,actions被触发后,将数据提交给Mutations进行处理并更新state。add ({ commit }, n) { // 第一个参数为context对象,它不是store本身,可以通过context.commit提交一个Mutation。第二个参数为用于更新state的参数。commit('add', n)}},getters: {}, // 类似于computedmodules: {} // 将store拆分成多个命名空间,分开使用。
})
推荐阅读
-
在近期的一个H5游戏开发项目中,需要将Excel数据转换为JSON格式。经过调研,市面上缺乏合适的工具满足需求。因此,决定利用Node.js、EJSExcel、Express和Vue.js自行构建这一工具。本文主要介绍项目的第一阶段,即Vue.js项目的初始化及开发环境的配置过程,详细阐述了如何搭建高效的前端开发环境,确保后续功能开发的顺利进行。 ...
[详细]
蜡笔小新 2024-10-26 07:41:45
-
根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ...
[详细]
蜡笔小新 2024-10-29 10:05:38
-
-
本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ...
[详细]
蜡笔小新 2024-11-09 15:14:28
-
蜡笔小新 2024-11-07 13:12:35
-
本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ...
[详细]
蜡笔小新 2024-11-06 13:30:57
-
本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ...
[详细]
蜡笔小新 2024-11-05 20:00:42
-
基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ...
[详细]
蜡笔小新 2024-11-01 11:20:11
-
本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ...
[详细]
蜡笔小新 2024-10-31 16:52:55
-
Unity与MySQL连接过程中出现的新挑战及解决方案探析 ...
[详细]
蜡笔小新 2024-11-11 09:55:19
-
在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ...
[详细]
蜡笔小新 2024-11-09 12:37:55
-
本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ...
[详细]
蜡笔小新 2024-11-04 15:50:18
-
本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ...
[详细]
蜡笔小新 2024-11-03 19:54:00
-
如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ...
[详细]
蜡笔小新 2024-11-02 17:32:17
-
本文深入探讨了 `ExpressionChangedAfterItHasBeenCheckedError` 错误的原因及其解决方案。通过分析 Angular 的变更检测机制,详细解释了该错误的发生条件,并提供了多种有效的应对策略,帮助开发者在实际开发中避免这一常见问题。 ...
[详细]
蜡笔小新 2024-10-29 14:37:27
-
为何Serverless将成为未来十年的主导技术领域? ...
[详细]
蜡笔小新 2024-10-28 09:23:05
-