react-redux的Provider和Connect的引发的思考
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的引发的思考的更多相关文章
- React & Redux 的一些基本知识点
一.React.createClass 跟 React.Component 的区别在于后者使用了ES6的语法,用constructor构造器来构造默认的属性和状态. 1. React.createCl ...
- react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware
今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...
- [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 ...
- webpack+react+redux+es6开发模式
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- react+redux教程(四)undo、devtools、router
上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...
- angular开发者吐槽react+redux的复杂:“一个demo证明你的开发效率低下”
曾经看到一篇文章,写的是jquery开发者吐槽angular的复杂.作为一个angular开发者,我来吐槽一下react+redux的复杂. 例子 为了让大家看得舒服,我用最简单的一个demo来展示r ...
- React + Redux 入坑指南
Redux 原理 1. 单一数据源 all states ==>Store 随着组件的复杂度上升(包括交互逻辑和业务逻辑),数据来源逐渐混乱,导致组件内部数据调用十分复杂,会产生数据冗余或者混用 ...
- webpack+react+redux+es6
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- React+Redux学习笔记:React+Redux简易开发步骤
前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...
随机推荐
- JavaScript取出字符串和尾随空格
书写JavaScript性能trim()之前和之后删除空字符串格,的功能的应用String物replace()方法去除空字符串端到端格.trim()例如,对于功能键下面的代码: <script ...
- 半监督学习(semi-supervised learning)
P(x)P(x,y)}⇒P(y|x) 自 P(x) 生成的无标签样本: 自 P(x,y) 生成的标记样本:
- 对XAML进行编辑的辅助类(XamlHelper)
原文:对XAML进行编辑的辅助类(XamlHelper) // XamlHelper.cs// --------------------------------------------// 对XAML ...
- C#选择多个文件并读取多个文件数据
原文:C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8 ...
- objective-c启用ARC时的内存管理
PDF版下载:http://download.csdn.net/detail/cuibo1123/7443125 在objective-c中,内存的引用计数一直是一个让人比較头疼的问题.尤其 ...
- 《菊与刀》original 的阅读
0. 词汇 foe:敌人,反对者,危害物: rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革 ...
- 分享一下Oracle 10g和Toad for Oracle的安装步骤
三年前用过Oracle,单纯的“用过”,主要就是说对数据库的一些操作,还不包含创建一些存储过程之类的,所以对Oracle仅仅只是了解一点儿,因为当时那家公司里面,数据库里面的东西都是那些顾问负责的,再 ...
- MySQL—FTS实现原理介绍PPT
这个PPT是有一天我要给同事讲解MySQL的FTS的实现原理花了一个小时做的.
- matlab 工具函数 —— axnote(在坐标轴上写文本内容)
function axnote(string) font_size = get(0, 'DefaultAxesFontSize'); if 1 h1 = text(0.99, 0.05, string ...
- UVA 10869 - Brownie Points II(树阵)
UVA 10869 - Brownie Points II 题目链接 题意:平面上n个点,两个人,第一个人先选一条经过点的垂直x轴的线.然后还有一个人在这条线上穿过的点选一点作垂直该直线的线,然后划分 ...