通信机制

通信

常见的通信有哪几种形式?

  1. 父组件向子组件通信

  2. 子组件向父组件通信

  3. 跨级组件通信

  4. 兄弟组件通信

父组件向子组件通信

父组件向子组件传递 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 函数。

兄弟组件通信

兄弟组件通信,指的是在同一个父组件中的两个及以上的组件之间如何进行通信。针对这种情况,一般的做法就是将数据来源存放在它们共同的父级组件中。

  • 初始化时的参数传递

  • 实例化阶段的方法调用

子组件向父组件传递消息

  • 回调函数

  • 子组件部署消息接口

最后更新于

这有帮助吗?