文档章节

Redux 三大原则

wenxingjun
 wenxingjun
发布于 01/17 23:44
字数 694
阅读 15
收藏 0

1.单一数据源

在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个应用永远只有唯一的数据源。我们的第一反应可能是:如果有一个复杂应用,强制要求唯一的数据源岂不是产生一个特别庞大的JavaScript对象。 实际上,使用单一数据源的好处在于整个应用状态都保存在一个对象中,这样我们随时可以提取整个应用的状态进行持久化(比如实现一个针对整个应用的即时保存功能)。此外,这样的设计也为服务端渲染提供了可能。

2.状态是只读的

这一点和Flux思想不谋而合,,不同的是在Flux,因为store没有setter而限制了我们直接修改应用状态的能力,而在Redux中,这样的限制被执行得更加彻底,因为我们压根没有store。 在Redux中,我们并不会自己用代码来定义一个store。取而代之的是,我们定义一个reducer,它的功能是根据当前触发的action对当前应用状态(state)进行迭代,这里我们并没有直接修改应用状态,而是返回了一份全新的状态。

3.状态修改均由纯函数完成

这是Redux与Flux在表现上最大的不同。在Flux中,我们在actionCreator 里调用AppDispatcher.dispatch 方法来触发action,这样不仅有冗余的代码,而且因为直接修改了store中的数据,将导致无法保存每次数据变化前后的状态。 在Redux里,我们通过定义reducer来确定状态的修改,而每一个reducer都是纯函数,这意味着它没有副作用,即接受一定的输入,必定会得到一定的输出。 这样的设计的好处不仅在于reducer里对状态的修改变得简单、纯粹、可测试,更有意思的是,Redux利用每次新返回的状态生成酷炫的时间旅行(time travel)调试方式,让跟踪每一次因为触发action而改变状态的结果成为了可能。

© 著作权归作者所有

共有 人打赏支持
wenxingjun
粉丝 0
博文 37
码字总数 8444
作品 0
杭州
私信 提问
Redux and Mobx浅谈对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_17775997/article/details/83506361 Redex与Mobx都是状态管理库,用来管理应用的内部状态 Redux三大原则...

大灰狼的小绵羊哥哥
2018/10/29
0
0
再厉害的魔术也比不上真正的redux

why redux? 随着 JavaScript 单页应用开发日趋复杂,管理不断变化的 state 非常困难 Redux的出现就是为了解决state里的数据问题 在React中,数据在组件中是单向流动的 数据从一个方向父组件流...

Meteor
2018/06/06
0
0
[译] 从设计师的角度看 Redux

原文链接: www.smashingmagazine.com/2018/07/red… 推荐理由: 插图大爱 没有空洞的概念 也没有海量的代码! 内容概要: 你是否知道 Redux 的真正威力远不止状态管理吗?你是否想要了解 Redu...

SangKa
2018/07/11
0
0
Redux 基础教程以及结合 React 使用方式

本文教你实现一个最简单的 Redux 应用,以及结合 React 如何使用。 Redux简介 概念 状态管理工具,使用之后可以清晰的知道应用里发生了什么。数据如何修改,如何更新的。 出现的动机 以前我刚...

暖生
01/08
0
0
初识react(二) 实现一个简版的redux

前言 首先纠正个误区,redux可以配合jq等框架使用,并不单单局限于react。为了让所有人都看懂,我们这里先只实现一个最简单版本的 html+redux.js的使用。 为什么出现redux 随着单页面应用的复...

言sir
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部