React 组件通信方式

这篇具有很好参考价值的文章主要介绍了React 组件通信方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯。

1. 父子组件通信方式

1.1 父组件传递到子组件

直接通过属性进行传递,数据的传递可以提高组件的复用性。

1.2 子组件传递到父组件

  • 通过回调函数(callback)来实现。

  • ref 标记:父组件拿到子组件的引用,从而调用子组件的方法和访问子组件的状态。

2. 非父子组件通信方式

2.1 状态提升(中间人模式)

React 中的状态提升概括来说,就是将多个组件需要共享的状态提升到它们最近的父组件上。在父组件上改变这个状态然后通过 props 分发给子组件。本质上也是通过父子通信来实现。

应用场景:兄弟组件之间通信方式。不至于很复杂。

2.2 发布订阅模式

发布订阅模式思想:调度中心有一个订阅者集合,订阅者往调度中心注册订阅(一个回调方法),发布者调用调度中心提供的发布方法即可发布,发布方法中依次调用订阅者注入的回调。

// 调度中心
var EventBus = {
  // 订阅者集合
  subscribeList: [],

  // 订阅
  subscribe(callback) {
    this.subscribeList.push(callback)
  },

  // 发布
  publish(context) {
    this.subscribeList.map(callback=>{
      callback && callback(context)
    })
  }
}

// 订阅者
EventBus.subscribe((context)=>{
  console.log("订阅者1收到:", context)
})

EventBus.subscribe((context)=>{
  console.log("订阅者2收到:", context)
})

// 发布者
EventBus.publish("男人看了沉默...")

2.3 context 状态树传参

思想:React 官方提供的解决方法,采用生产者消费者这种模式。

哪些子组件需要通信,在他们共有的父组件身上包装一个 Provider (供应商)组件,供应商组件是通过 React.createContext 方法创建出来的。 成为供应商组件,得提供服务。消费者享受服务。如果一个消费者改变服务,另一个消费者受到影响。

定义全局 context 对象:

const GlobalContext = React.createContext()
export default GlobalContext

定义供应商组件 Provide(生产者):

export default class App extends Component {
  render() {
    return (
      <div>
        <GlobalContext.Provider value={
          {
            name: "hubert",
            change: ()=>{ 
              // 通过状态修改更新 
            }
          }
        }>
        {/* 组件内容 */}
        </GlobalContext.Provider>
      </div>
    )
  }
}

定义消费者组件 Consumer(消费者):文章来源地址https://www.toymoban.com/news/detail-748941.html

class Customer extends Component {
  render() {
    return (
      <GlobalContext.Customer>
        {
          (value)=>{
            {/* 这里 value 值就是提供的服务 */}
          }
        }
      </GlobalContext.Customer>
    )
  }
}

到了这里,关于React 组件通信方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【React】组件生命周期、组件通信、setState

    ◼ 组件化思想的应用: ​  有了组件化的思想,我们在之后的开发中就要充分的利用它。 ​  尽可能的将页面拆分成一个个小的、可复用的组件。 ​  这样让我们的代码更加方便组织和管理,并且扩展性也更强。 ◼ React的组件相对于Vue更加的灵活和多样,按照不同的

    2024年01月20日
    浏览(44)
  • React组件之间通信

    1-1、安装 1-2、使用 A组件 B组件 1-3、总结

    2024年02月16日
    浏览(44)
  • React -- 组件通信

    A-B 父子通信 B-C 兄弟通信 A-E 跨层通信 **实现步骤 ** 父组件传递数据 - 在子组件标签上绑定属性 子组件接收数据 - 子组件通过props参数接收数据 props可以传递任意的合法数据 ,比如数字、字符串、布尔值、数组、对象、函数、JSX props是只读对象 子组件只能读取props中的数据,

    2024年02月19日
    浏览(45)
  • React 组件通信-全面解析

    这段代码包括一个父组件 App 和一个子组件 Module ,实现了父子组件之间的通信。 在父组件 App 中,使用 useState 来定义了一个状态 defaultTodo ,并初始化为 defaultTodos 。 defaultTodos 是从 ./components/module/contentData 文件中导入的一个默认的待办事项列表。 App 组件中定义了两个回调函

    2024年02月15日
    浏览(49)
  • react父子组件通信

    父传子:最常见 把父组件中的数据传给子组件 子传父:子组件调用父组件传递过来的参数,并且把想要传递的数据当成函数的实参传入即可 【子组件通过调用父组件传递到子组件的方法向父组件传递数据】 对于子传父中子组件还是先调用了父组件传递过来的参数,之后再向

    2024年02月07日
    浏览(42)
  • React中组件之间如何通信?

    我们将组件间通信可以拆分为两个词: 组件 通信 回顾Vue系列的文章,组件是 vue 中最强大的功能之一,同样组件化是 React 的核心思想 相比 vue , React 的组件更加灵活和多样,按照不同的方式可以分成很多类型的组件 而通信指的是发送者通过某种媒体以某种格式来传递信息

    2024年02月04日
    浏览(56)
  • 前端react入门day03-react获取dom与组件通信

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 受控表单绑定  React中获取DOM 组件通信 父传子  父传子-基础实现 父传子-props说明 父传子 - 特殊的prop children 子传父  使用状态提升实现兄弟组件通信 使用Context机制跨

    2024年02月01日
    浏览(55)
  • React中消息订阅与发布(PubSubJS)——两个组件之间通信

    结合案例:github搜索案例 结果如下图 1.父容器代码 2.搜索Search子模块代码(发布消息) 3.展示Lisi子模块代码(订阅消息) 发布订阅分析 在Search子模块中发布消息,用PubSub.publish中进行发布消息,在List子模块中订阅消息,拿到数据进行展示 使用步骤 工具库: PubSubJS 下载: npm instal

    2024年02月09日
    浏览(46)
  • 【React组件通讯的三种方式】

    React组件之间的通讯分为三种: 父组件 →子组件 子组件 →父组件 兄弟组件 步骤: 父组件提供要传递的state数据 给子组件标签添加属性,值为state中的数据 子组件中通过props接收父组件中传递的数据 项目演示: 使用脚手架生成一个React项目: npx create-react-app ex-app 运行项目

    2024年02月12日
    浏览(34)
  • React初体验-Hello React的组件化方式-React入门小案例

    接下来我们通过Hello React的案例, 来体验一下React开发模式, 以及jsx的语法 Hello React案例演练 第一步: 先引入React开发依赖 第二步: 这里我们编写React的script代码中,必须添加 type=\\\"text/babel\\\" ,作用是可以让babel解析jsx的语法 第三步: 创建元素渲染到页面 React18之前的做法: 通过 R

    2023年04月08日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包