上篇文章已经说了,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() { 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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。