react-redux相关概念及设计思想介绍

1、react-redux 将所有组件分为两大类 UI组件(负责UI的呈现) 和 容器组件(负责管理数据和逻辑)。

2、UI组件特点

  • 只负责UI的呈现,不带有任何业务逻辑
  • 没有状态(即不使用this.state这个变量),注意:使用react-redux后推荐组件用函数声明,而不是类声明。
  • 所有的数据都由参数(this.props)提供
  • 不使用任何 Redux 的 API
  • 因为不含状态,UI组件又称为“纯组件”,即它跟纯函数一样,纯粹由参数决定他的值。

3、容器组件(相当于包含子组件的父组件),容器组件包含UI组件

  • 负责管理数据和业务逻辑,不负责UI呈现
  • 带有内部状态
  • 使用Redux的API

4.UI组件和容器组件的结合

  • 如果一个组件既有UI又有业务逻辑,那么将它拆分成两层结构:外面是一个容器组件,里面是一个UI组件。前者负责与外部的通讯,将数据传给后者,由后者渲染出视图。
  • react-redux 规定,所有的 UI 组件都由用户提供,容器组件则是由react-redux自动生成。

5、react-redux 中几个API概念:

  • react-redux中的connect() 用于从UI组件生成容器组件
  • connect有两个常用的参数:mapStateToProps()  mapDispatchToProps()
  • mapStateToProps是一个函数。它的作用是建立一个从外部state(即store中的数据)对象到UI组件的props对象的映射关系。执行后返回一个对象,里面的每一个键值对就是一个映射;mapStateToProps会订阅(绑定)store,每当 (store)state更新的时候,就会自动执行,重新计算UI组件的参数,从而触发UI组件的重新渲染;mapStateToProps的第一个参数总是state对象,还可以使用第二个参数,代表容器组件的props对象。使用ownProps作为参数后,如果容器组件的参数发生变化,也会引发UI组件的重新渲染
  • 如果connect方法省略mapStateToProps参数,那么UI组件就不会订阅store,就是说store的更新不会引起UI组件的更新。
  • mapDispatchToProps是connect函数的第二个参数,用来建立UI组件的参数到store.dispatch方法的映射(分发业务逻辑),也就是说,它定义了用户的哪些操作应该当做Action,传给store,他可以是一个函数,也可以是一个对象;如果mapDispatchToProps是一个函数,会得到dispatch和ownProps(容器组件的props对象)两个参数,应该返回一个对象,该对象的每一个键值对都是一个映射,定义了UI组件的参数怎样发出action;如果mapDispatchToProps是一个对象,它的每个键名也是对应UI组件的同名参数,键值应该是一个参数,会被当做action creator,返回的 action 会由 redux 自动发出

6、react-redux的<Provider>组件 connect 方法生成容器组件以后,需要让容器组件拿到state 对象,才能生成UI组件的参数。一种解决方法是将state对象作为参数,传入容器组件。但是容器组件可能在很深的层级,一级级将state传下去就很麻烦。

为此 react-redux 提供 Provider 组件,可以让容器组件拿到state,在根组件外面包了一层Provider,App的所有子组件都可以拿到state了,它的原理是 React 组件的context 属性,store放在了上下文对象context上面。react-redux自动生成的容器组件的代码,就类似下面这样,然后子组件就可以从context拿到store

<Provider store={store}>
<App />
<Provider>

7、总结以上介绍:react-redux的思想是将UI组件与业务逻辑以和状态管理分离开来

最新文章

  1. ---awk 调shell 命令的方法
  2. 卸载已经安装的rpm包
  3. lvm snapshot(lvm 快照)
  4. HashMap源码解析
  5. varnish4.0简介
  6. js下的sleep实现
  7. AndroidStudio支持新的NDK的操作使用
  8. CloudTest 事务监控:千呼万唤始出来
  9. WPF——传实体类及绑定实体类属性
  10. 洛谷 U2878 小R的分数比赛(fraction)
  11. ImageView类简介
  12. [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]
  13. post和get请求的区别
  14. 16.3Sum Closet
  15. Microsoft Visual Studio调试监视器(MSVSMON.EXE)未能启动
  16. CMDB服务器管理系统【s5day89】:深入理解Java的接口和抽象类
  17. oracle redo日志文件损坏恢复
  18. SQL学习1:基础
  19. loj#2054. 「TJOI / HEOI2016」树
  20. jboss的使用和安装

热门文章

  1. 做dede网站知识点总结(捷斯网站)
  2. AIX7.1安装zabbix_agent3.4
  3. cachestat 安装文档
  4. mysql中的SQL语句执行的顺序
  5. Netty+WebSocket 获取火币交易所数据项目
  6. Linux-Windows 端口转发
  7. ue4使用SceneCapture2D创建小地图示例 蓝图
  8. 自己动手,开发轻量级,高性能http服务器。
  9. adb 下载安装
  10. 微服务SpringCloud之Spring Cloud Config配置中心SVN