设为首页收藏本站

react native【免费】VIP视频教程 rn开发者交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 东方耀

[Redux架构] 70、手把手教React Native实战之Redux架构简化版_详述_源码

  [复制链接]

0

主题

181

帖子

400

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
400
发表于 2016-9-1 13:12:35 | 显示全部楼层
努力学习。天天向上
回复 支持 反对

使用道具 举报

0

主题

118

帖子

304

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
304
发表于 2016-9-1 14:07:51 | 显示全部楼层
111111111111111111111
回复 支持 反对

使用道具 举报

0

主题

110

帖子

244

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
244
发表于 2016-9-1 23:28:00 | 显示全部楼层
好好学习,天天向上
回复 支持 反对

使用道具 举报

0

主题

139

帖子

350

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
350
发表于 2016-9-2 08:59:12 | 显示全部楼层
#69、手把手教React Native实战之从React到Flux再到Redux的技术演进_笔记

React-->Flux-->Redux

##React
React 是一个 View 层的框架,用来渲染视图,它主要做几件事情:
1.组件化   2.利用 props 形成单向的数据流  3.根据state的变化来更新 view
4.利用虚拟 DOM 来提升渲染性能

![react_tree](?790x506_130)

React能够根据state的变化来更新view(render方法),一般来说引起state变化的动作除了来自外部,大部分都来自于页面上的用户活动,那页面上的用户活动怎样对 state 产生作用呢?React 中每个组件都有setState方法用于改变组件当前的 state,所以可以把更改 state 的逻辑写在各自的组件里,但这样做的问题在于,当项目逻辑变得越来越复杂的时候,将很难理清 state 跟 view 之间的对应关系(一个 state 的变化可能引起多个 view 的变化,一个 view 上面触发的事件可能引起多个 state 的改变)。我们需要对所有引起 state 变化的情况进行统一管理,于是就有了 Flux。



##Flux

Flux是Facebook用来构建用户端的web应用的应用程序体系架构。或者说是一种思想,它跟 React 本身没什么关系,它可以用在 React 上,也可以用在别的框架上。前面说到 Flux 在 React 中主要用来统一管理引起 state 变化的情况。Flux 维护着一个或者多个叫做Store的变量,就像 MVC 里面的 Model,里面存放着应用用到的所有数据,当一个事件触发时 ,Flux 对事件进行处理,对 Store 进行更新,当 Store 发生变化时,通常是由应用的根组件(也叫 controller view)去获取最新的 store,然后更新 state,之后利用 React 单向数据流的特点一层层将新的 state 向下传递实现 view 的更新。这里的 controller view 可以有多个也可以不是根组件,但是这样数据流维护起来就比较麻烦。

![react_tree](?1300x708_130)

单向的数据流是Flux应用的核心特性,上图应该成为Flux程序员的主要心智模型。Dispatcher,stores和views是拥有清晰的输入输出的独立节点。而actions是包含了新的数据和身份属性的简单对象。

Flux 主要包括四个部分,Dispatcher、Store、View、Action,其中 Dispatcher 是 Flux 的核心枢纽,它相当于是一个事件分发器,将那些分散在各个组件里面的逻辑代码收集起来,统一在 Dispatcher 中进行处理。完整的 Flux 处理流程是这样的:用户通过与 view 交互或者外部产生一个 Action,Dispatcher 接收到 Action 并执行那些已经注册的回调,向所有 Store 分发 Action。通过注册的回调,Store 响应那些与他们所保存的状态有关的 Action。然后 Store 会触发一个 change 事件,来提醒 controller-views 数据已经发生了改变。Controller-views 监听这些事件并重新从 Store 中获取数据。这些 controller-views 调用他们自己的 setState() 方法,重新渲染自身以及组件树上的所有后代组件。使用 Flux 有个好处就是我只需要用 action 对象向 Dispatcher 描述当前的事件就可以执行对应的逻辑,因为 Dispatcher 是所有 Action 的处理中心,即使没有对应的事件发生,我们也可以“伪造”一个出来,非常利于测试。

这种的响应式编程,或者更准确的说数据流编程亦或基于数据流和变化传播的编程(Reactive Programming),可以使我们很容易去推断我们的应用是如何工作的。因为我们的应用中数据是单向流动的,不存在双向绑定。应用的状态只保存在store中,这就允许应用中不同部分保持高度的低耦合。虽然依赖在store中也确实存在,但他们之间保持着严格的等级制度,并通过dispacher来管理同步更新。

Facebook目前在生产环境中使用的flux可以分别在npm, Brower,or Github中获取。


##Redux【可预测状态容器】

三个原则:1.单一数据源  2.State是只读的    3.纯函数应用状态变更

Action:intent 用标准化的语言描述用户的意图

Reducer:Action 只是描述了有事情发生了这一事实,并没有指明应用如何更新 state,而这正是 reducer 要做的事情。

Store: Redux 应用只有一个单一的 store

View:视图页面

Redux 的作用跟 Flux 是一样的,它可以看作是 Flux 的一种实现,但是又有点不同,具体的不同总结起来就是:

1.Redux 只有一个 store,Flux 里面会有多个 store 存储应用数据,并在 store 里面执行更新逻辑,当 store 变化的时候再通知 controller-view 更新自己的数据,Redux 将各个 store 整合成一个完整的 store,并且可以根据这个 store 推导出应用完整的 state。同时 Redux 中更新的逻辑也不在 store 中执行而是放在 reducer 中,Redux 里的 store 已经完全接管了 dispatcher 相关的工作

2.没有 Dispatcher,Redux 中没有 Dispatcher 的概念,它使用 reducer 来进行事件的处理,reducer 是一个纯函数,这个函数被表述为(previousState, action) => newState,它根据应用的状态和当前的 action 推导出新的 state。Redux 中有多个 reducer,每个 reducer 负责维护应用整体 state 树中的某一部分,多个 reducer 可以通过combineReducers方法合成一个根reducer,这个根reducer负责维护完整的 state,当一个 action 被发出,store 会调用 dispatch方法向某个特定的 reducer 传递该 action,reducer 收到 action 之后执行对应的更新逻辑然后返回一个新的 state,state 的更新最终会传递到根reducer处,返回一个全新的完整的 state,然后传递给 view。

在我看来,Redux 和 Flux 之间最大的区别就是对 store/reducer 的抽象,Flux 中 store 是各自为战的,每个 store 只对对应的 controller-view 负责,每次更新都只通知对应的 controller-view;而 Redux 中各子 reducer 都是由根reducer统一管理的,每个子reducer的变化都要经过根reducer的整合。

Flux 中的 store 是这样的:
![flux_store](?926x480_130)


Redux 中的 store(或者叫 reducer)是这样的:
![redux_reducer](?932x445_130)

redux最终目的就是让状态(state)变化变得可预测;这是 Redux 的核心思想之一。不直接修改整个应用的状态树,而是将状态树的每一部分进行拷贝并修改拷贝后的部分,然后将这些部分重新组合成一颗新的状态树。子 reducers 会把他们创建的副本传回给根 reducer,而根 reducer 会把这些副本组合起来形成一颗新的状态树。最后根 reducer 将新的状态树传回给 store,store 再将新的状态树设为最终的状态。

看漫画,学 Redux-不写一行代码,轻松看懂 Redux 原理:http://zhongjie-chen.github.io/b ... BB-%E5%AD%A6-Redux/


Redux中文文档:https://github.com/camsong/redux-in-chinese
回复 支持 反对

使用道具 举报

6

主题

101

帖子

318

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
318
发表于 2016-9-2 10:52:56 | 显示全部楼层
好好学习  天天向上
回复 支持 反对

使用道具 举报

1

主题

143

帖子

363

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
363
发表于 2016-9-2 16:08:37 | 显示全部楼层
66666666666666666
回复 支持 反对

使用道具 举报

0

主题

79

帖子

216

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
216
发表于 2016-9-3 18:24:03 | 显示全部楼层
React Native实战之Redux架构简化版_详述_源码
回复 支持 反对

使用道具 举报

0

主题

135

帖子

308

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
308
发表于 2016-9-4 13:53:59 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

230

帖子

484

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
484
发表于 2016-9-5 12:00:22 | 显示全部楼层
React Native实战开发视频教程
回复 支持 反对

使用道具 举报

0

主题

117

帖子

284

积分

RN高级VIP

Rank: 9Rank: 9Rank: 9

积分
284
发表于 2016-9-5 17:22:31 | 显示全部楼层
楼主辛苦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|ReactNative Inc.    

GMT+8, 2018-10-22 23:17 , Processed in 0.170720 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表