简介
React组件之间的通信是基于props的单向数据流,即父组件通过props向子组件传值,亦或是子组件执行传入的函数来更新父组件的state,这都满足了我们大部分的使用场景- 一般地,对于兄弟组件之间的通信,是通过它们共同的祖先组件进行的,即 Lifting State Up,官方文档也有介绍。组件一通过事件将状态变更通知它们共同的祖先组件,祖先组再将状态同步到组件二
- 但是,如果组件之间嵌套的比较深,即使提升状态到共同父组件,再同步状态到相应的组件还是需要一层一层的传递下去,可能会比较繁琐
- 在对应的场景中,
context就可以缩短父组件到子组件的属性传递路径
例1
import Parent from './Parent' |
Parent.jsx
import React from "react" |
ChildOne.jsx
export default class ChildOne extends React.Component { |
ChildTwo.jsx
export default class ChildTwo extends React.Component { |
在
Container.childContextTypes中进行接口的声明,通过getChildContext返回更新后的state,在Child.contextTypes中声明要获取的接口,这样在子组件内部就能通过this.context获取到。通过Context这样一个中间对象,ChildOne和ChildTwo就可以相互通信了
例2
组件嵌套传递属性,在导航里面引用
Page中的变量
- 使用
context来传递 - 使用props层级传递
使用
context组件需要定义propTypes,需要严格校验、声明类型、字段
class Page extends React.Component { |
context在Provider种应用
provider组件就是使用context,把store放到context里,所有的子元素可以直接取到store
import PropTypes from 'prop-types' |
connect负责连接组件,给到redux里的数据放到组件的属性里
- 负责接收一个组件,把
state里的一些数据放进去,返回一个组件 - 数据变化的时候,能够通知组件
//高阶组件写法 |