React 之 Redux

栏目: 服务器 · 发布时间: 5年前

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

React 之 Redux

应用场景

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

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

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

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

React 之 Redux

设计思想:

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

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

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

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

React 之 Redux

三大原则:

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

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

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

React 之 Redux

Redux 概念解析

1 Store

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

React 之 Redux

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

2 State

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

React 之 Redux

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

3 Action

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

React 之 Redux

4 Action Creator

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

React 之 Redux

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

5 store.dispatch()

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

React 之 Redux

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

React 之 Redux

6 Reducer

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

这种 State 计算过程叫做 Reducer

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

7 combineReducers( reducer s)

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

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

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

8 applyMiddleware(...middlewares)

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

React 之 Redux

使用示例:

React 之 Redux

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

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

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

React 之 Redux

connect: 连接 React 组件与 Redux store。

React 之 Redux

React 之 Redux

:end:

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Ruby Programming Language

The Ruby Programming Language

David Flanagan、Yukihiro Matsumoto / O'Reilly Media, Inc. / 2008 / USD 39.99

Ruby has gained some attention through the popular Ruby on Rails web development framework, but the language alone is worthy of more consideration -- a lot more. This book offers a definition explanat......一起来看看 《The Ruby Programming Language》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器