React-Redux源码解析(二) -- Provider

上篇文章已经说了,provider主要的作用就是将外界传入的store设置成可以通过this.context获取。 所以它的实现方式也比较简单:

主要就是定义childContextTypes,还有getChildContext。

export function createProvider(storeKey = 'store', subKey) {
    const subscriptionKey = subKey || `${storeKey}Subscription`

    class Provider extends Component {
        getChildContext() {
          // 在这里将它赋值给this.context
          return { [storeKey]: this[storeKey], [subscriptionKey]: null }
        }

        constructor(props, context) {
          super(props, context)
          // 将外面传入的store赋值给this.store
          this[storeKey] = props.store;
        }

        render() {
         // Children.only用于获取仅有的一个子组件,多过或者少一一个都会报错
          return Children.only(this.props.children)
        }
    }

    if (process.env.NODE_ENV !== 'production') {
      Provider.prototype.componentWillReceiveProps = function (nextProps) {
        if (this[storeKey] !== nextProps.store) {
          warnAboutReceivingStore()
        }
      }
    }

    Provider.propTypes = {
        store: storeShape.isRequired,
        children: PropTypes.element.isRequired,
    }
    Provider.childContextTypes = {
        [storeKey]: storeShape.isRequired,
        [subscriptionKey]: subscriptionShape,
    }

    return Provider
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张高兴的博客

张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L

3536
来自专栏一“技”之长

Java开发GUI之图形绘制 原

    在Java的GUI组件中,每一个视图都有一个paint方法,这个方法负责组件的绘制,其中会传入Graphics对象参数,开发者可以在paint方法中操作...

701
来自专栏菩提树下的杨过

Flash/Flex学习笔记(32):播放音乐并同步显示lyc歌词(适用于Silverlight)

题外话:个别朋友总是问我同样的问题,做为一名c#/silverlight程序员为啥还要学flash ? 回 答:看日本片时,就不能对照看欧美的么? 不体会日本的...

1807
来自专栏iOS开发笔记

cordova插件- Contacts

添加插件 $cordova plugin add cordova-plugin-contacts 图 8出现如上则添加成功 插件的使用 Methods navi...

3275
来自专栏Golang语言社区

go语言chan 和 routine活用

这里,我们以游戏中的一个情况为例。比如魔兽世界里的40人团队副本BOSS战,很多玩家同时攻击BOSS,BOSS的血量会进行频繁修改,我们要记录对BOSS的致命一...

3296
来自专栏Android 开发者

[译] 支持库 27.1.0 中的 Loader

1403
来自专栏JackieZheng

Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用

  在Prefuse上摸打滚爬了一段时间,发现其和蔼可亲,容易上手。但是每每在打开gephi,导入数据再运行时,总还是在心里暗自赞叹gephi的绚烂之极,无与匹...

2757
来自专栏张高兴的博客

张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED

3276
来自专栏智能计算时代

Microservices Ecosystem Transit Map

…we assembled a map of the ecosystem to help guide practitioners, vendors, inves...

3244
来自专栏iOS122-移动混合开发研究院

Mantle--国外程序员最常用的iOS模型&字典转换框架

Mantle简介 Mantle是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架。 Mantle能做什么 Mantle可以轻松把JS...

1976

扫码关注云+社区