react是当下非常流行的JS框架,react秉承的设计原则是一切皆组件;react-redux是react中使用redux的桥接工具,react-redux也继承react的设计原则,使用组件的形式提供服务。

  react-redux向用户暴漏了两个核心组件,分别是Provider和Connect。相信使用过react-redux的小伙伴都不难理解Provider是组件,其实connect本质也是一个组件,即是常说的HOC组件(高阶组件),官方对connect的介绍是:“连接 React 组件与 Redux store”。

  1、先介绍一下Provider和connect的使用常场景

  (1)Provider的使用方法如下所示,只要把需要使用store的组件(通常是App根组件)包裹起来就可以

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

  (2)connect的使用方法如下所示,可见connect其实是一个高阶函数,接收两个参数(还有可选参数),返回一个新的函数,新的函数接收一个组件为输入,返回新的组件。这不就是react中HOC组件的定义吗,接收子组件,返回新的容器组件。由此可知,connect其实也是一个组件。

1 connect(mapStateToProps, mapDispatchToProps)(App);

  2、下面再来看看Provider和connect是如何提供服务的:

  (1)Provider组件有一个属性store,其接收一个用户定义的js对象作为store,给所有子组件提供state;

  (2)connect组件接收两个属性(不考虑可选参数),mapStateToProps将store中的state转化为新的容器组件的props,mapDispatchToProps则是将redux中的action转化为新的容器组件的props,返回可使用的props的新的组件。这整个即是使用connect组件返回的新的组件。

 <connect mapStateToProps={mapStateToProps} mapDispatchToProps={mapDispatchToProps}>
<App></App>
</connect>

  这个场景是不是似曾相识,没错,provider和connect的功能都是通过给自身的属性赋值,将需要的功能传递给子组件,使得子组件也拥有相应的功能;这不就是熟悉的依赖注入吗,将需要的功能通过第三方的形式提供给需要的组件,从而实现逻辑上的解耦。熟悉angular的同学可能更加清晰,angular是通过模块加载时将提前设定好的功能注入到相应的组件,react中也是一样,只不过变成了更为熟悉的组件的形式来提供服务,换句话说,provider和connect都是依赖注入的语法糖,其本质是通过引入第三方组件(这里即是Provider组件),将需要的功能通过属性的形式注入到子组件(熟悉angular的同学可自行脑补service的使用场景)。 HOC的原始需求不外乎如此,通过高阶组件将action和view进行逻辑上的解耦,从而实现view的复用。

react-redux的Provider和Connect的引发的思考的更多相关文章

  1. React & Redux 的一些基本知识点

    一.React.createClass 跟 React.Component 的区别在于后者使用了ES6的语法,用constructor构造器来构造默认的属性和状态. 1. React.createCl ...

  2. react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware

    今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...

  3. [Redux] Generating Containers with connect() from React Redux (VisibleTodoList)

    Learn how to use the that comes with React Redux instead of the hand-rolled implementation from the ...

  4. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  5. react+redux教程(四)undo、devtools、router

    上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...

  6. angular开发者吐槽react+redux的复杂:“一个demo证明你的开发效率低下”

    曾经看到一篇文章,写的是jquery开发者吐槽angular的复杂.作为一个angular开发者,我来吐槽一下react+redux的复杂. 例子 为了让大家看得舒服,我用最简单的一个demo来展示r ...

  7. React + Redux 入坑指南

    Redux 原理 1. 单一数据源 all states ==>Store 随着组件的复杂度上升(包括交互逻辑和业务逻辑),数据来源逐渐混乱,导致组件内部数据调用十分复杂,会产生数据冗余或者混用 ...

  8. webpack+react+redux+es6

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  9. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

随机推荐

  1. JavaScript取出字符串和尾随空格

    书写JavaScript性能trim()之前和之后删除空字符串格,的功能的应用String物replace()方法去除空字符串端到端格.trim()例如,对于功能键下面的代码: <script ...

  2. 半监督学习(semi-supervised learning)

    P(x)P(x,y)}⇒P(y|x) 自 P(x) 生成的无标签样本: 自 P(x,y) 生成的标记样本:

  3. 对XAML进行编辑的辅助类(XamlHelper)

    原文:对XAML进行编辑的辅助类(XamlHelper) // XamlHelper.cs// --------------------------------------------// 对XAML ...

  4. C#选择多个文件并读取多个文件数据

    原文:C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8 ...

  5. objective-c启用ARC时的内存管理

    PDF版下载:http://download.csdn.net/detail/cuibo1123/7443125      在objective-c中,内存的引用计数一直是一个让人比較头疼的问题.尤其 ...

  6. 《菊与刀》original 的阅读

    0. 词汇 foe:敌人,反对者,危害物: rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革 ...

  7. 分享一下Oracle 10g和Toad for Oracle的安装步骤

    三年前用过Oracle,单纯的“用过”,主要就是说对数据库的一些操作,还不包含创建一些存储过程之类的,所以对Oracle仅仅只是了解一点儿,因为当时那家公司里面,数据库里面的东西都是那些顾问负责的,再 ...

  8. MySQL—FTS实现原理介绍PPT

    这个PPT是有一天我要给同事讲解MySQL的FTS的实现原理花了一个小时做的.

  9. matlab 工具函数 —— axnote(在坐标轴上写文本内容)

    function axnote(string) font_size = get(0, 'DefaultAxesFontSize'); if 1 h1 = text(0.99, 0.05, string ...

  10. UVA 10869 - Brownie Points II(树阵)

    UVA 10869 - Brownie Points II 题目链接 题意:平面上n个点,两个人,第一个人先选一条经过点的垂直x轴的线.然后还有一个人在这条线上穿过的点选一点作垂直该直线的线,然后划分 ...