通信机制
通信
常见的通信有哪几种形式?
父组件向子组件通信
子组件向父组件通信
跨级组件通信
兄弟组件通信
父组件向子组件通信
父组件向子组件传递 props,子组件得到 props 后进行相应的处理。
function Sup(props) {
const { user } = props;
return (
<p className="sup-context">
<span className="sup-context-title">Who am I, you are</span>: {user}
</p>
);
}export default class Container extends Component {
constructor() {
super();
this.state = {
userName: 'shenxuxiang',
};
}
render() {
return (
<div className="page-one">
<h1 className="page-one-title">父组件向子组件通信</h1>
<Sup user={this.state.userName} />
</div>
);
}
}
Container 是一个父组件,Sup 作为子组件。我们将 user 属性传递到了 Sup 内部。这时我们就可以发现,在 Sup 内部是可以拿到 user 的值的。
子组件向父组件通信
利用回调函数,可以实现子组件向父组件通信: 父组件将一个函数作为 props 传递给子组件,子组件调用该回调函数,便可以向父组件通信。
跨组件之间通信
跨组件通信,就是父组件向子组件的子组件通信,一般嵌套的层级超过三层我们就可以称为跨级。跨级组件通信可以采用下面两种方式:
中间组件层层传递 props
使用 context 对象
使用 context 对象
使用 context 我们可以把要通信的内容放在这个容器中,这样一来,不管嵌套有多深,都可以随意取用。
创建一个 context 对象
必须使用 React.createContext 方法进行创建,参数可以是任意类型的值
Context.Provider
每个 Context 对象都会返回一个 Provider 组件,它允许消费组件订阅 context 的变化。
Provider 接收一个 value 属性,传递给消费组件。一个 Provider 可以和多个消费组件有对应关系。多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据。
当 Provider 的 value 值发生变化时,它内部的所有消费组件都会重新渲染。Provider 及其内部 consumer 组件都不受制于 shouldComponentUpdate 函数。
兄弟组件通信
兄弟组件通信,指的是在同一个父组件中的两个及以上的组件之间如何进行通信。针对这种情况,一般的做法就是将数据来源存放在它们共同的父级组件中。
初始化时的参数传递
实例化阶段的方法调用
子组件向父组件传递消息
回调函数
子组件部署消息接口
最后更新于
这有帮助吗?