我们要把 context 相关的代码从所有业务组件中清除出去,现在的代码里面还有一个地方是被污染的。那就是 src/index.js 里面的 Index

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
class extends Component {
static childContextTypes = {
store: PropTypes.object
} getChildContext () {
return { store }
} render () {
return (
<div>
<Header />
<Content />
</div>
)
}
}
...

其实它要用 context 就是因为要把 store 存放到里面,好让子组件 connect 的时候能够取到 store。我们可以额外构建一个组件来做这种脏活,然后让这个组件成为组件树的根节点,那么它的子组件都可以获取到 context 了。

我们把这个组件叫 Provider,因为它提供(provide)了 store

src/react-redux.js 新增代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
export class Provider extends Component {
static propTypes = {
store: PropTypes.object,
children: PropTypes.any
} static childContextTypes = {
store: PropTypes.object
} getChildContext () {
return {
store: this.props.store
}
} render () {
return (
<div>{this.props.children}</div>
)
}
}

Provider 做的事情也很简单,它就是一个容器组件,会把嵌套的内容原封不动作为自己的子组件渲染出来。它还会把外界传给它的 props.store 放到 context,这样子组件 connect 的时候都可以获取到。

可以用它来重构我们的 src/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...

import { Provider } from './react-redux'
... // 删除 Index 里面所有关于 context 的代码
class extends Component {
render () {
return (
<div>
<Header />
<Content />
</div>
)
}
} // 把 Provider 作为组件树的根节点
ReactDOM.render(
大专栏  【React.js小书】动手实现 React-redux(五):Provider - 方志line"> <Provider store={store}>
<Index />
</Provider>,
document.getElementById('root')
)

这样我们就把所有关于 context 的代码从组件里面删除了。

目录

第一个阶段

第二个阶段

第三个阶段

第四个阶段



最新文章

  1. 使用Spring和SpringMVC管理bean时要注意的一个小细节
  2. SQLiteDatabase 基本操作
  3. CentOS MySQL 配置
  4. XQuery的 value() 方法、 exist() 方法 和 nodes() 方法
  5. angularjs数据异步加载时的绑定事件
  6. AngularJs-指令和指令之间的交互(动感超人)
  7. centos 升级GCC/G++
  8. [置顶] 自娱自乐6之Linux gadget驱动5(自编gadget驱动,包涵与之通讯的主机usb驱动,已调试通过)
  9. 最新 Cocos2d-x 3.2 开发环境搭建(windows环境下)
  10. 【iOS】文件下载小记
  11. Algorithm --&gt; 并查集
  12. vim模式下报错E37: No write since last change (add ! to override)
  13. windows 下 Django 搭架子 - 从建立project到建立app
  14. 【Android】让Python在Android系统上飞一会儿
  15. 通过反射调用Unity编辑器提供的各种功能
  16. WebLogic Server Components:XA Transactions
  17. wpc 双工
  18. require 与 include 的区别
  19. Java J2EE读取配置文件
  20. java使用HttpClient

热门文章

  1. 命令行的操作——cd
  2. P3810 【模板】三维偏序(陌上花开)(CDQ分治)
  3. Chrome使用频率最高的快捷键
  4. 痢疾杆菌|SARS
  5. JavaSE--Comparator 和 Comparable 区别
  6. axios新手实践实现登陆
  7. js等于符号的详解
  8. Python 进阶 - 面向对象
  9. 17.3.20---python的变量作用域
  10. ThreadPoolExecutor自定义线程池