Vue | 30 规模化 - 状态管理

news/2024/7/10 1:15:34 标签: vue, frontend technology, framework

类Flux官方实现

由于多个状态分散在不同的组件和组件直接的交互中,大型应用常常变得复杂。为了解决这个问题,Vue提供了vuex:我们有受到Elm启发的状态管理库。它甚至集成进了vue-devtools,无需配置即可进行时光旅行调试。

React 开发者参考以下信息

如果你来自React开发者,你可能想知道vuex和redux的差异,Redux是Flux生态中最流行的实现。Redux事实上无法感知视图层,所有它通过Vue的一些简单绑定很容易使用。Vuex的不同之处在于它是专门为Vue应用所设计。这允许它和Vue更好的集成,提供一个更为简单的API和提升开发体验。

简单的状态管理起步

常常被忽略的是Vue应用的原生的数据对象的真实来源。一个Vue实例只是简单的代理访问。因此,如果你有一些通过多个实例共享的状态,你可以通过identity来共享它:

const sourceOfTruth = {}

const vmA = new Vue({
	data: sourceOfTruth
})

const vmB = new Vue({
	data: sourceOfTruth
})

现在无论sourceTruth何时改变,vmAvmB都将自动更新他们的视图。这些实例的子组件也可以通过this.$root.$data访问。我们有一个唯一的数据来源,但是测试可能是一场噩梦。在任何部分任何时间我们的app都可能改变,不会留下改变的记录。

为了帮助解决这个问题,我们采用一个简单的store模式

var store = {
	debug: true,
	state: {
		message: 'Hello!'
	},
	setMessageAction(newValue) {
		if (this.debug) console.log('setMessageAction triggered with', newValue)
		this.state.message = newValue
	},
	clearMessageAction () {
		if(this.debug) console.log('clearMessageAction trigged')
		this.state.message = ''
	}
}

注意所有store的state的状态改变都会放在store本身的actions中管理。这种中心状态管理能够更容易的理解哪种mutations类型的状态将会发生改变和他们如何被触发。现在,当有错误发生的时候,我们有一个log记录导致错误发生的原因。

此外,每一个实例/组件仍然拥有和管理自己的私有状态:

var vmA = new Vue({
	data: {
		privateState: {},
		sharedState: store.state
	}
})

var vmB = new Vue({
	data: {
		privateState: {},
		sharedState: store.state
	}
})

store

重要提示你绝不能在actions里面替换原始的状态对象-组件和store需要去共享应用同一个对象,mutation才能被观察。

接着我们继续延伸约定,组件不允许直接修改store实例的state,而应该分发事件执行actions去通过store,我们最终达成了Flux框架。这个框架的好处是我们能够记录所有改变的发生给到store和实现高级调试工具记录变更,快照,和历史回滚/时光旅行。

说了一圈又回到vuex,所以如果你读到这,可以尝试去试一下。


http://www.niftyadmin.cn/n/1035740.html

相关文章

Vue | 31 规模化 - 服务端渲染

完整的服务端渲染指南 我们为在服务端渲染Vue应用创建了一个完整的指导。对于那些已经熟悉Vue客户端开发、服务端Node.js开发和webpack的人来说,很适合阅读这份更深入的指南。请移步ssr.vuejs.org。 Nuxt.js 正确配置可用于生产环境的服务器渲染应用可能是相当复…

android.os.SystemProperties反射调用

android属性用Systemproperties.set(name, value)&#xff0c; 获取android属性用Systemproperties.get(name) 需要注意的是android属性的名称是有一定的格式要求的 反射调用方式&#xff1a; try {Class<?> clazz Class.forName("android.os.SystemProperties&q…

Vue | 32 内部 - 深入响应式原理

主要内容&#xff1a; 改变是如何被追踪到的改变检测的一些说明及声明属性的方式声明响应式属性的形式及原因异步更新队列的方式及如何在nextTick下手动更新数据 现在是时候深入研究一下了&#xff01;Vue最独特的功能之一就是非侵入式的响应系统。模型仅仅是纯JavaScript对象。…

build.gradle常用总结1

1.设置编译版本&#xff0c;名字 android {compileSdkVersion 28buildToolsVersion "29.0.3"defaultConfig {versionCode 1versionName "name" buildDate()} }2.设置指定platform.keystore signingConfigs {mykey {storeFile file(../platform.keystore)…

Vue 系列 | Vue-Router

注意&#xff1a; 本文所有示例代码详见&#xff1a;vue-rouer-demo 1.What | 什么是Vue Router Vue Router是Vue.js提供的官方路由管理器&#xff0c;它和Vue.js深度集成,使构建单页面应用非常方便。 2.Why | 为什么要使用Vue Router 大家打开LorneNote个网站&#xff0c;这…

C++引用讲解

知识点整理引用是C的概念引用的使用1.普通引用&#xff08;必须要初始化&#xff09;2.引用做函数参数&#xff08;不用进行初始化&#xff09;3.复杂数据类型做函数引用4.引用本质5.函数的返回值是引用&#xff08;引用当左值&#xff09;6指针引用7常引用引用是C的概念 引用…

nvm npm 使用教程

nvm 这里推荐使用nvm进行node的版本管理&#xff0c;进行多版本切换比较方便。 What | 是什么 node version manager – node版本管理工具,可以同时切换node的多个版本在本地运行。 How | 如何使用 1.安装nvm 以curl为例,打开终端&#xff0c;复制粘贴如下命令后&#xff…

8.【Windows】安装ubuntu子系统

目录1windows打开开发者模式2.打开liux子系统3.microsoft store 下载 ubuntu,并安装4.安装完成&#xff0c;重启机器后&#xff0c;打开使用5.常见问题5.1 “指定的网络名不再可用”解决办法采用windows开发者模式中&#xff0c;打开linux子系统方式步骤&#xff1a;1windows打…