首页 > 其他分享 >React中组件之间是如何通信的 react的组件通信方式有哪些

React中组件之间是如何通信的 react的组件通信方式有哪些

时间:2023-01-03 09:12:23浏览次数:40  
标签:传递 通信 react 传递数据 props 组件 数据

一、是什么

  通信指的是发送者通过某种媒体 以某种格式来传递信息 到收信者以达到某个目的,广义上,任何信息的传递都是通信

二、如何通信?

组件传递的方式有很多种,根据传送者和接收者可以分为如下:

  • 父组件向子组件传递
  • 子组件向父组件传递
  • 兄弟组件之间的通信
  • 父组件向后代组件传递
  • 非关系组件传递

1、父组件向子组件传递数据

  由于React的数据流动为单向的,父组件向子组件传递是最常见的方式

  父组件在调用子组件的时候,只需在子组件的标签内传递参数,子组件通过props属性就能接收到父组件传递过来的参数

//父组件给子组件数据 
//方法=》通过属性方式
function App(){
   let money = 100
   const changes = ()=>{
        
    }
    return(
        <div>
              父亲
              {/* 父组件给子组件数据通过属性方式 */}
              {/* 本质 =》元素(组件) =》添加属性 
               这个属性会被react 底层自动处理成 这个函数的参数 =》{}类型
              */}
            <Children money={money}  data='5000' change = {changes}></Children>
        </div>
    )
}

//在子组件种通过props 接收
// Children
function Children(props){
        console.log(props);  //money={money}  data='5000' change = {changes}
return( <div className="children">Children get father {props.money}</div>  ) } export default App

2、子组件向父组件传递数据

  子组件向父组件通信的基本思路是,父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值

//组件的数据传递
//子组件给父组件数据 
//解决方法 =》通过自定方法
//本质=》函数的声明和函数调用
//实现 =》
//1 父组件给子组件传递数据数据
// 2在子组件中给父组件数据

function App(){
    //1在父组件中声明方法
    const getChildren = (value)=>{
        console.log('获取到子组件的数据',value);  
    }
    return(
        <div>
              父亲
              {/* 2在把这个方法传递给子组件 */}
            <Children getChildren={getChildren}></Children>
        </div>
    )
}

function Children(props){
    const getFather =()=>{
        //3在子组件中调用父组件申明的方式
        props.getChildren(10000)
    }
    return(
        <div className="children">

            <button onClick={()=>getFather()}>给父组件数据</button>
        </div>
    )
}
export default App

//总结子组件给父组件数据
// 本质就是函数的声明和调用

//1 在父组件中声明方法
//2 在子组件中调用这个方法

 3、兄弟组件之间的通信

  如果是兄弟组件之间的数据传递,则父组件作为中间层来实现数据的互通,通过使用父组件传递

4、父组件向后代组件传递数据

  父组件向后代组件传递数据是一件最普通的事情,就像全局数据一样

  使用useContext提供了组件之间通信的一种方式,可以共享数据,其他数据都能读取对应的数据

 

标签:传递,通信,react,传递数据,props,组件,数据
From: https://www.cnblogs.com/chccee/p/17021048.html

相关文章

  • Vue3:子组件 watch 父组件传递的 props,watch 不触发,该如何通知子组件更新?
    问题阐述问题描述父组件传递给子组件props,由于父组件的业务需求,希望子组件通过watch监听props修改数据。父组件模板:<PaginationPageref="pagination"@fixed......
  • react 项目的性能优化
    react项目的性能优化有哪些?1、react模块化处理就是将react内容进行模块化划分,一个模块一个组件,react更新机制是组件重新更新2、在react项目中更新数据,不要直接将......
  • 重新捋一捋React源码之更新渲染流程
    前言前些天在看DanAbramov个人博客(推荐阅读,站在React开发者的角度去解读一些API的设计初衷和最佳实践)里的一篇文章,其重点部分的思想就是即使不使用Memo(),也可以通过组合......
  • 第十四章《多线程》第6节:线程通信
    ​之前所有的例子中,线程的执行都具有一定的随机性。如果希望线程能够有序的执行,必须使用线程通信技术。Java语言提供了一些线程通信的机制能够保证线程的有序执行,本小节将详......
  • iView 树形组件 on-select-change 事件用法
    一、组件  <Tree:data="baseData"@on-select-change="checkBoxSel"show-checkbox></Tree>二、方法checkBoxSel(root,node){......
  • Flannel网络组件
    34.Flannel网络组件GitHub-flannel-io/flannel:flannel是一种用于容器的网络结构,专为Kubernetes设计概述有CoreOS开源的针对k8s的网络服务,其目的为解决k8s集群中......
  • Calico网络组件
    35.Calico网络组件简介Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gwCalico方便集成OpenStack这种云架构,为openstack虚拟机、容器、裸机提供......
  • K8S网络通信
    33.K8S网络通信33.1网络二层通信基于目标mac地址通信,不可跨局域网通信,通常是由交换机实现报文转发33.2网络通信-VlanVlanVLAN虚拟局域网,是将一个物理交换机的网络......
  • 面试官:React怎么做性能优化
    前言最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。这两......
  • 面试官让你说说react状态管理?
    开发者普遍认为状态是组件的一部分,但是同时却又在剥离状态上不停的造轮子,这不是很矛盾么?对于一个最简单的文本组件而言functionText(){const[text,setText]=......