前端框架react----组件通信

目录

前言

一、父组件向子组件通信

二、子组件向父组件通信

 三、跨级组件通信

 四、非嵌套组件通信

 总结


前言

前面几篇文章介绍了 React 中的基础知识点,这篇文章将还是通过实例的方式记录一下 React 中组件之间的通信方式。

React 中,需要组件通信的情况一般有以下几种:

  • 父组件向子组件通信

  • 子组件向父组件通信

  • 跨级组件通信

  • 非嵌套组件通信

一、父组件向子组件通信

React 中采用数据单向流动的方式,父组件向子组件传递数据也是很常见的情况,父组件通过 props 向子组件传递数据

// 父组件
class App extends React.Component {
    constructor(props) {
        super(props)
    }
    render() {
        return (
            <Child name='tadpole' />
        )
    }
}

// 子组件
function Child(props) {
    return (
        <div>{props.name}</div>
    )
}

二、子组件向父组件通信

利用自定义事件,触发回调

 三、跨级组件通信

  • 一层一层传递 props

  • Context

React 中遵循数据单向流动(自上而下)的规则,其实我们完全可以通过每级组件传递 props 的方式来实现跨级通信的目的。但是,在这个过程中,有些组件是不需要使用上级传递过来的 props 的,这种操作无疑是显得多余的,这个时候就引入了 Context

Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法,它设计目的就是为了共享那些对于一个组件树而言是“全局”的数据

使用 Context 的注意点:

  • 每个 Context 对象都会返回一个 Provider React 组件

  • 只有当组件所处的树中没有匹配到 Provider 时,其 defaultValue 参数才会生效,默认值为 undefined

  • 多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据 Provider 接收一个 value 属性,传递给消费组件(React 会往上找到最近的 Provider,然后使用它的值)

  • 可以在任何生命周期中访问到,包括 render 函数中

 四、非嵌套组件通信

非嵌套组件通信的思路一般有以下几种:

  • 找到组件共同的父组件 (可以参考这个 评论组件既有父子组件通信也有兄弟组件通信)

  • 利用 Context API 进行通信,创建一个 全局 可访问的值

  • 利用 events 创建自定义事件

一般情况下,第一种方式找到共同的父组件可能存在很多级的情况,不是很友好,第二种方式对于后期维护或者说对于组件的可复用性不是很友好,所以,我们试一下自定义事件这种方式

首先,我们需要一个 events 这个包

npm install events -S

通过注册、触发事件来实现组件通信

 总结

以上就是 React 组件之间通信的常用方式,其实在我们实践的过程中肯定也发现了有些方式可以用于多种组件关系的通信,关键在于使用最合适的方式

当然,对于一些比较复杂的组件通信来说,我们也可以选择使用状态管理工具,比如 fluxredux 等,使我们的组件通信更加容易、更好管理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小先生

知识是无价的,白嫖也可以的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值