美文网首页
React父子组件之间如何通信?

React父子组件之间如何通信?

作者: 东郭皮蛋 | 来源:发表于2019-05-01 16:49 被阅读0次

父组件向子组件通讯

通讯是单向的,数据必须是由一方传到另一方。在 React 中,父组件可以向子组件通过传 props 的方式,向子组件进行通讯。


image
class Parent extends Component{
 state = {
 msg: 'start'
 };

 componentDidMount() {
 setTimeout(() => {
 this.setState({
 msg: 'end'
 });
 }, 1000);
 }

 render() {
 return <Child_1 msg={this.state.msg} />;
 }
}

class Child_1 extends Component{
 render() {
 return <p>{this.props.msg}</p>
 }
}

如果父组件与子组件之间不止一个层级,如 Parent 与 Child_1_1 这样的关系,可通过 ... 运算符(Object 剩余和展开属性),将父组件的信息,以更简洁的方式传递给更深层级的子组件。通过这种方式,不用考虑性能的问题,通过 babel 转义后的 ... 运算符 性能和原生的一致,且上级组件 props 与 state 的改变,会导致组件本身及其子组件的生命周期改变,

// 通过 ... 运算符 向 Child_1_1 传递 Parent 组件的信息
class Child_1 extends Component{
 render() {
 return <div>
 <p>{this.props.msg}</p>
 <Child_1_1 {...this.props}/>
 </div>
 }
}

class Child_1_1 extends Component{
 render() {
 return <p>{this.props.msg}</p>
 }
}

子组件向父组件通讯

在上一个例子中,父组件可以通过传递 props 的方式,自顶而下向子组件进行通讯。而子组件向父组件通讯,同样也需要父组件向子组件传递 props 进行通讯,只是父组件传递的,是作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到父组件的作用域中。

class Parent extends Component{
 state = {
 msg: 'start'
 };

 transferMsg(msg) {
 this.setState({
 msg
 });
 }

 render() {
 return <div>
 <p>child msg: {this.state.msg}</p>
 <Child_1 transferMsg = {msg => this.transferMsg(msg)} />
 </div>;
 }
}

class Child_1 extends Component{
 componentDidMount() {
 setTimeout(() => {
 this.props.transferMsg('end')
 }, 1000);
 }

 render() {
 return <div>
 <p>child_1 component</p>
 </div>
 }
}

在上面的例子中,我们使用了 箭头函数,将父组件的 transferMsg 函数通过 props 传递给子组件,得益于箭头函数,保证子组件在调用 transferMsg 函数时,其内部 this 仍指向父组件。

当然,对于层级比较深的子组件与父组件之间的通讯,仍可使用 ... 运算符,将父组件的调用函数传递给子组件,具体方法和上面的例子类似。

相关文章

  • React02-组件通信

    React父子组件之间如何通信父组件传一个函数给子组件,子组件在适当的时候调用这个函数React爷孙组件之间如何通...

  • React 问答

    React 父子组件之间如何通信。 参考答案父组件要传数据给子组件很简单,直接放在 props 里即可子组件要传递...

  • 「React Native」Event Bus,消息总线

    (一)父子间组件通信:   一般使用props,回调函数进行通信。(二)跨组件之间通信:  (1)React Na...

  • React父子组件之间如何通信?

    父组件向子组件通讯 通讯是单向的,数据必须是由一方传到另一方。在 React 中,父组件可以向子组件通过传 pro...

  • React 组件件通信2——非父子组件间通信

    孙辈级通信 当需要让子组件跨级访问信息时候,我们可以通过之前那篇React 组件之间的通信1——之父子之间的通信那...

  • React 笔记摘要

    父子组件数据通信 父子组件之间的数据通信细分其实还有两种:父与子之间和子与父之间。 在React中,父与子之间的数...

  • [Vue]组件之间如何通信?

    组件通信可以大致分为两种情况,父子组件之间的通信和非父子组件之间的通信,下面来分别介绍 一、父子组件之间的通信 1...

  • 组件之间通信及为什么使用Redux

    组件之间状态通信 父子组件通信 React使用单项数据流,意味着父组件将自身状态作为属性传递给子组件。(props...

  • Vue3组件化(二):非父子组件的通信、插槽Slot

    非父子组件的通信 在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。这里我们...

  • 12.组件化开发2-非父子组件之间通信-祖先和后代之间的通信

    在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。非父子组件的通信又可以分为...

网友评论

      本文标题:React父子组件之间如何通信?

      本文链接:https://www.haomeiwen.com/subject/nmlwnqtx.html