Javascript Flux架构如何优于MVC
我试图理解flux架构解决的真正问题是什么 第一个也是主要的问题Javascript Flux架构如何优于MVC,javascript,redux,ngrx,Javascript,Redux,Ngrx,我试图理解flux架构解决的真正问题是什么 第一个也是主要的问题 将存储为状态管理。redux(通量架构实现)操作->存储(还原器)->视图中的示例。这是一种管理状态的简单方法 但是在很多博客文章中,他们谈论MVC/双向数据绑定。 我认为这是错误的,因为我不明白flux架构是如何关心双向数据绑定的。 例如: angularJs登录应用程序: <div ng-controller="loginCtrl"> username<input ng-model="username
- 将存储为状态管理。redux(通量架构实现)操作->存储(还原器)->视图中的示例。这是一种管理状态的简单方法
<div ng-controller="loginCtrl">
username<input ng-model="username">
password<input ng-model="password">
<button ng-click="submit()">Send</button>
</div>
当然,我在实际应用程序中并没有这样做,但在这个示例中,我可以使用双向数据绑定和存储。
在本例中,解释是一个更改可以循环并在整个代码库中产生级联效应(使调试和理解变得非常复杂)
在这种情况下,他们说的通量是通量的良好实现
所以我试着在上阅读关于flux架构的文章,他们分享了一段youtube视频,并解释说MVC变得很复杂,可以进行infinte循环
我的问题是:
Facebook创建了流量模式,以巩固许多组件之间的状态管理。使用React,每个组件都能够保持自己的状态。因此,我们需要注意如何为组件布局架构。通常来说,我们试图将开发视为一个大型组件,其中包含许多较小的组件。。。大部分状态管理由最外层组件维护。这在很多情况下都很有效,但不是所有情况下都有效 所以通量被发明来补充React的单向数据流,以帮助在React组件之间创建一个更容易推理的状态系统。Redux是Flux的一个类似的实现,但相反,它使推理变得更加容易,因为Redux只有一个由所有组件共享的状态存储
综上所述,我们必须考虑一个孤立的部件能够有效地与另一个部件进行通信。React有一个单向的父子组件流,但是当我们必须在该组件之外进行通信时会发生什么呢?在组件之外有一个状态存储非常有意义。相反,在组件之间设置手动事件和事件侦听器会很快变得混乱。我认为您必须更多地考虑MVC与CBA(基于组件的体系结构)的关系,而不是Redux与MVC的关系 Redux可以帮助您同步组件之间的状态,并且当您得到共享状态的复杂组件树时,它会非常出色 我想向您介绍这篇精彩的演讲,它可以帮助您了解在基于组件的体系结构中使用Redux的好处 在Angular 2管理州-圣路易斯Angular午餐-Kyle Cordes Facebook认为MVC很快变得复杂**,很难培养新的开发者 “Flux和MVC之间最大的区别在于避免了级联更新”—— 所以他们转向了Flux,这在风格上更像是FP而不是OOP 但是Flux实际上只是在客户端正确实现的MVC(考虑到用户操作也必须通过控制器,而不仅仅是服务器交互) 商店=模型 调度员=控制器 视图=视图 视图只与调度器/控制器进行对话,而不是直接与存储/模型进行对话(这与他们在有缺陷的MVC实现中所做的相反;MVC实现基于可观察性,) 与普通MVC的主要区别在于调度员确保: “在您的存储层完全完成之前,视图或任何其他内容都无法通过系统执行操作。”——
**-我只能猜测这是因为“上帝对象”或“胖模型”,以及由于(糟糕的)OOP而增加的耦合。谢谢您的回答!,我理解facebook的问题是为了理解flux,但我没有发现mvc的问题,他们只是使用单一模型(store),所有数据和所有组件都订阅单一模型(store)。双向数据绑定或mvc的问题在哪里?如果你的应用程序增长开始是无限循环的,我找不到这个场景的例子。非常感谢,我补充说angular 2从redux(通量架构)中只获得一个好处。。。国家在一个地方。i fillredux不是vs mvc,它是带有一个模型(状态)的mvc,对于angular 2组件,它是控制器+视图
angular.module('app',[]).controller('loginCtrl', function($scioe) {
$scope.submit = function() {
globalStore.dispatch({
action: 'LOGIN',
payload: {
username: $scope.username,
password: $scope.password
}
})
}
})