ccontext的传递方向是由定义了根数据源的组件向子组件传递,父级
- 通过getChildContext(Class)在context上定义要传递给子级的数据
- 通过组件(Class)的childContextTypes定义传递给子级数据的数据类型
上上级组件传递的context数据可以被上级组件同key的context数据所替换,比如:
1 | // App |
1 | // Parent |
1 | // Child |
输出:
如果要将Child组件的父级组件直接挂载在Dom上,Child组件是拿不到App或者Parent组件传递过来的context,比如将上述的Parent.js改写为:
1 | // Parent |
输出:
此时在Child组件中就获取不到父级传递下来的context,组件的构成如下:
如图可知App中申明的context,只能在其子组件中被访问,而Parent组件中通过ReactDom.render的方式挂载到body上,此时挂载的组件已经不再是App的子组件了,所以也就不能访问到App的context了
虽然无法直接获取App中的context,但render中返回null的Parent组件,可以访问App的context,所以可以借助Parent组件,将其作为一个中间件,比如:
1 | // Parent |
输出: