当前位置: 首页 > 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教程

http://www.lryc.cn/news/446362.html

相关文章:

  • C++核心编程和桌面应用开发 第七天(运算符重载 智能指针)
  • echarts地图的简单使用
  • Qt 项目优化实践方向
  • 常见的15个:自然语言处理(NLP)实战项目
  • CKKS同态加密通用函数近似方法和openFHE实现
  • Webpack 5的新特性:Asset Modules与Dynamic Import
  • 解释python requests包的timeout
  • 蒙语学习快速方法,速记蒙语单词怎么学习更高效!
  • Vue3组件通信13种方法
  • Servlet入门:服务端小程序的初试(自己学习整理的资料)
  • 代码随想录算法训练营第三七天| 动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ 322. 零钱兑换
  • [报错解决] 运行MATCHA时需要在线下载Arial.TTF字体,但是无法连接huggingface
  • B-树(不是B减树)原理剖析(1)
  • 【shell脚本8】Shell脚本学习--其他
  • 《深度学习》ResNet残差网络、BN批处理层 结构、原理详解
  • javadoc:jdk 9通过javadoc API读取java源码中的注释信息(comment)
  • nordic使用FDS保存数据需要注意的地方
  • docker-compose集群(单机多节点)环境搭建与使用
  • 从静态多态、动态多态到虚函数表、虚函数指针
  • 用 Pygame 实现一个乒乓球游戏
  • 基于大数据可视化的化妆品推荐及数据分析系统
  • Java项目实战II基于Java+Spring Boot+MySQL的汽车销售网站(文档+源码+数据库)
  • 数学基础 -- 微积分最优化之一个最简单的例子
  • kubernetes K8S 结合 Istio 实现流量治理
  • Selenium with Python学习笔记整理(网课+网站持续更新)
  • 1.随机事件与概率
  • Redis结合Caffeine实现二级缓存:提高应用程序性能
  • 【LLM】Ollama:本地大模型 WebAPI 调用
  • SpringBoot集成阿里easyexcel(二)Excel监听以及常用工具类
  • 使用ELK Stack进行日志管理和分析:从入门到精通