当前位置: 首页 > news >正文

【React】组件通信

1. 组件通信

  • 组件间的数据传递
    在这里插入图片描述
1.1 父传子

步骤:

  1. 父组件传递数据——在子组件标签上绑定属性
  2. 子组件接收数据——子组件通过props参数接收数据
function Son(props) {return <div>{props.value}</div>
}function App() {const value = '父组件传给子组件的值'return (<div className="App"><Son value={value} /></div>);
}export default App;

在这里插入图片描述
-props说明:
在这里插入图片描述

function Son(props) {console.log('props', props)return <div>{props.value}</div>
}function App() {const value = '父组件传给子组件的值'return (<div className="App"><Sonvalue={value}age={100}list={['a', 'b']}obj={{ key: 11 }}isTrue={false}clickButton={() => {console.log('click button')}}dom={<span>hello</span>}/></div>);
}export default App;

在这里插入图片描述

  • 特色的prop —— children
function Son(props) {return <div>我是子组件 {props.children}</div>
}function App() {return (<div className="App"><Son><div>我就是那个特殊的prop</div></Son></div>);
}export default App;

在这里插入图片描述

1.2 子传父
  • 核心思路:子组件调用父组件的函数并传递参数
function Son(props) {return <button onClick={() => props.onUpdateMsg('子组件中的数据,我要传给父组件')}>click me</button>
}function App() {function getSonMsg(msg) {alert(msg)}return (<div className="App"><Son onUpdateMsg={getSonMsg} /></div>);
}export default App;

在这里插入图片描述

1.3 兄弟组件传值 —— 状态提升

  • 核心:传给共同的父组件,进行数据传递(子传父 + 父
    姐姐:爸爸,你跟妹妹说我是她姐姐
    爸爸:妹妹,你姐说你是她的妹妹
    哈哈哈哈哈哈哈
    在这里插入图片描述
import { useState } from 'react'
function BigSister(props) {return <button onClick={() => props.onUpdateMsg('爸爸,告诉妹妹我是她姐姐')}>click me</button>
}function SmallSister(props) {return <div>姐姐对妹妹说的:{props.value}</div>
}function App() {const [bigToSmallMsg, setBigToSmallMsg] = useState('');function getBigSisterMsg(msg) {setBigToSmallMsg(msg)}return (<div className="App"><BigSister onUpdateMsg={getBigSisterMsg} /><SmallSister value={bigToSmallMsg} /></div>);
}export default App;

在这里插入图片描述

1.4 跨层组件通信 —— context

在这里插入图片描述

import { createContext, useContext } from 'react'
// step 1
const MoneyContext = createContext()
function Father(props) {return <div>我是爸爸<Son /></div>
}function Son(props) {// step 3:消费const money = useContext(MoneyContext)return <div>我是儿子 ------<span>这是我爷爷留给我的财产:{money}</span></div>
}function App() {const money = 100000000return (// step 2: 提供<MoneyContext.Provider value={money}><div className="App">我是爷爷<Father /></div></MoneyContext.Provider>);
}export default App;

在这里插入图片描述

参考

黑马程序员react教程

相关文章:

  • Android 已经过时的方法用什么新方法替代?
  • 使用Python解决数据分析中的相关性分析
  • macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案
  • 分享个锂电池升压芯片,3.7V升5V大电流输出的芯片。AD2403 PWM升压芯片
  • 如何创建一个包含多个列的表?
  • 828华为云征文|华为云Flexus云服务器X实例——部署EduSoho网校系统、二次开发对接华为云视频点播实现CDN加速播放
  • fastadmin本地安装插件提示”请从官网渠道下载插件压缩包(code:2)(code:1)“
  • 数据结构(Day18)
  • vue-pdf 实现pdf预览、高亮、分页、定位功能
  • 问题记录:end value has mixed support, consider using flex-end instead
  • docker和ufw冲突问题
  • SpringBoot开发——整合P6Spy详细记录SQL执行耗时情况
  • 智能识别猫猫
  • Day 1 词汇备战
  • 使用MyBatis-Plus与Thymeleaf在Spring Boot中实现增删改查
  • 【译】JS基础算法脚本:字符串结尾
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angular数据绑定机制
  • C++类中的特殊成员函数
  • conda常用的命令
  • javascript从右向左截取指定位数字符的3种方法
  • java小心机(3)| 浅析finalize()
  • Laravel Telescope:优雅的应用调试工具
  • Meteor的表单提交:Form
  • Promise面试题2实现异步串行执行
  • Sass Day-01
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Web设计流程优化:网页效果图设计新思路
  • 闭包,sync使用细节
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 树莓派 - 使用须知
  • 听说你叫Java(二)–Servlet请求
  • 想写好前端,先练好内功
  • 1.Ext JS 建立web开发工程
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ‌Excel VBA进行间比法设计
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #define与typedef区别
  • #git 撤消对文件的更改
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (02)vite环境变量配置
  • (Qt) 默认QtWidget应用包含什么?
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十三)Flask之特殊装饰器详解
  • (四)js前端开发中设计模式之工厂方法模式
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)appium-desktop定位元素原理
  • (一)VirtualBox安装增强功能
  • (转)3D模板阴影原理
  • (转)母版页和相对路径
  • (转)总结使用Unity 3D优化游戏运行性能的经验