博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 之 Redux
阅读量:7046 次
发布时间:2019-06-28

本文共 2287 字,大约阅读时间需要 7 分钟。

React 之 Redux

应用场景

1. 随着 JavaScript 单页应用开发日趋复杂,管理不断变化的 state 非常困难

2Redux的出现就是为了解决state里的数据问题

3. 在React中,数据在组件中是单向流动的

4. 数据从一个方向父组件流向子组件(通过props),由于这个特征,两个非父子关系的组件(或者称作兄弟组件)之间的通信就比较麻烦

设计思想:

  • - Redux是将整个应用状态储存到一个地方,成为stroe

  • - 里面保存一个状态树 state tree

  • - 组件可以派发dispatch行为action给store,而不是直接通知其他组件

  • - 其他组件可以通过订阅store中的状态(state)来刷新自己的视图

三大原则:

  1. - 整个应用的 state 被存储在一颗 object tree 中,并且这个 object tree 只存在于唯一一个store中

  2. - State 只是只读的,唯一改变  state 的方法就是出发action,action是一个用于描述已发生事件的普通对象,使用纯函数来进行修改,为了描述action如何改变 state tree,你需要鞋reducers

  3. - 单一数据源的设计让 React组件之间的通信更加方便,同时也便于状态的统一管理

Redux 概念解析

    

1Store

store就是数据保存的地方,你可以把它看成是一个容器。整个应用中只能有一个store,Redux提供 createStore 这个函数,用来生成 Store

  • 上述代码中。createStore函数接受另一个函数作为参数,返回新生成的Store对象

2State

Store包含所有的数据,如果想得到某个时点的数据,就要对Store生成快照,这种时间点的数据集合就叫做 State,当前时刻的 State 可以通过 store.getState()

  • Redux 规定,一个State对应一个View。只要 State 相同, View就相同。你知道 State 什么样,就知道View是什么样,反之亦然。

3Action

State 改变会导致 View 的变化,但是,用户接触不到 State,只能接触到 View,所以,View的的变化必定是 State 导致的。 Action 就是 View 发出的通知,表示State要发生变化了。Action 是一个对象。其中 type 属性是必须的,表示 Action 名称,其他 属性可以自由设置,社区有个规范可以参考

4Action Creator

View 要发出多少消息,就会有多少种Action。如果手写,就会很麻烦。可以定义一个函数来生成 Action,这个 函数叫做 Action Creator

  • 上面代码中,addTodo函数就是一个 Action Creator

5store.dispatch()

store.dispatch(),是 View 发出的唯一方法。

  • 上面代码中,store.dispatch()接受一个Action对象作为参数,将它发送出去。结合 Action Cretaor,这段代码可以改成下面这样

6Reducer

Store 收到 Action 之后,必须给出一个新的State,这样View才会发生变化。

这种 State 计算过程叫做 Reducer

Reducer 是一个纯函数,它接受当前 State 和 Action 作为参数,返回一个新的 State

7combineReducers(reducers)

combineReducers 辅助函数的作用是。把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore。

多个子 reducer 函数合并后,相当于整体函数会为 state 特定字段进行映射产生特定的reducer函数。如中的例子

todos和counter只会处理对应字段过来的action。

8applyMiddleware(...middlewares)

输入一个middlewares数组,返回一个函数,函数以createStore为参数:

使用示例:

每个 middleware 接受 的 和 函数作为命名参数,并返回一个函数。该函数会被传入 被称为 next 的下一个 middleware 的 dispatch 方法,并返回一个接收 action 的新函数,这个函数可以直接调用next(action),或者在其他需要的时刻调用,甚至根本不去调用它。调用链中最后一个 middleware 会接受真实的 store 的 方法作为 next 参数,并借此结束调用链。所以,middleware 的函数签名是 ({ getState, dispatch }) => next => action。

9<Provider store>和connect([mapStateToProps], [mapDispatchToProps],[mergeProps], [options])

<Provider store>使组件层级中的 connect()方法都能够获得 Redux store。正常情况下,你的根组件应该嵌套在 <Provider>中才能使用 connect()方法。

connect: 连接 React 组件与 Redux store。

?

人要怀揣着想象力活下去。—— 安藤忠雄

转载地址:http://tbkol.baihongyu.com/

你可能感兴趣的文章
向NSMutableArray插入数组的方法
查看>>
三方控件收集
查看>>
关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契
查看>>
Uboot Beaglebone Black Usb驱动分析
查看>>
Python实战之列表list的详细简单练习2
查看>>
Mininet系列实验(三):Mininet命令延伸实验扩展
查看>>
Auto CAD 安装问题 “acad.exe - 系统错误 ”
查看>>
rsync入门使用
查看>>
bzoj1040 内向树DP
查看>>
谈谈Java工程师应该具有的知识
查看>>
记录在Centos下安装和使用Git的过程,从github上克隆仓库和提交。
查看>>
小技巧——优盘图标改变和背景改变
查看>>
异常集合
查看>>
软件工程课程总结
查看>>
JavaScript运算符和控制语句
查看>>
mysql权限管理
查看>>
UVA 12167 Proving Equivalences 强连通分量
查看>>
Jenkins Debian packages
查看>>
如何在Windows XP中设置自定义纸张
查看>>
三星S7562手机拨号时显示“未在网络上注册”是什么原因?
查看>>