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. Spring RestTemplate 专题

    相同的参数(接口的入参json打印在日志了)在PostMan中返回预期的数据,但使用RestTemplate时去提示信息错误(参数中汉字).这种情况,搞得怀疑对RestTemplate的理解了使用Re ...

  2. 简单IO,将一段字符串存入一个记事本

    using System; using System.IO; using System.Text; namespace 字符串存入记事本 { class Program { static void M ...

  3. WPF文字描边的解决方法

    原文:WPF文字描边的解决方法  由于项目原因,今天研究了一下午WPF的文字描边,网上这方面的资料奇少,搞了半天才发现强大的WPF原来不直接支持文字描边啊.最后求助于MSDN,找到了方案,和大家分 ...

  4. Emoji:搜索将与您找到表情符号背后的故事

    眼下.秉已经开始支持emoji搜索,这意味着,你可以插入或粘贴系列emoji表情,让我们的爱.微笑.食品等..些表情随意组合,必应总会带给你非常多有趣的但却没有不论什么实际用途的搜索结果. 这是一项非 ...

  5. UVA 10641 - Barisal Stadium(DP + 几何)

    题目链接:10641 - Barisal Stadium 题意:逆时针给定n个点,在给m个灯,每一个灯有一个花费,要求最小花费使得全部边能被灯照到 思路:用向量叉积推断向量的顺逆时针关系,从而预处理出 ...

  6. CefSharp For WPF基本使用

    原文:CefSharp For WPF基本使用 Nuget引用 CefSharp.Wpf CefSharp.Common cef.redist.x64 cef.redist.x86 直接搜索安装Cef ...

  7. TypeScript Array Remove

    定义一个数组 tags:any[]; 方法1:filter 删除并不留空位 this.tags = this.tags.filter(tag => tag !== removedTag); 方法 ...

  8. Android bluetooth介绍(两): android 蓝牙源架构和uart 至rfcomm过程

    关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本号:基于android4.2先前版本 bluez内核:linux/linux3.08系统:an ...

  9. WPF MessageBox 添加确认取消按钮 并判断

    很简单的功能随笔 if (System.Windows.MessageBox.Show("您确定要删除吗?", "提示:", MessageBoxButton. ...

  10. 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)

    原文:通通玩blend美工(6)下--仿iPhone滚动选择器的ListBox(交互逻辑) 上一篇我们已经把界面画出来了,这篇我们就来制作交互的逻辑吧.上一篇的电梯: http://www.cnblo ...