【React】组件通信

news2024/10/1 5:40:02

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">
      <Son
        value={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 = 100000000
  return (
    // step 2: 提供
    <MoneyContext.Provider value={money}>
      <div className="App">
        我是爷爷
        <Father />
      </div>
    </MoneyContext.Provider>
  );
}

export default App;

在这里插入图片描述

参考

黑马程序员react教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验二十:ds1302时钟实验

数码管硬件如以前实验所示‘ 完整代码如下 ds1302驱动 C文件 #include "ds1302.h" #include "intrins.h"u8 gWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//秒,分,时,日,月,周,年 u8 gREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,…

Vue3 + TS 实现同一项目同一链接,pc端打开是web应用,手机打开是H5应用

前言&#xff1a; 我自己搭建的项目基本都是用 postcss-px-to-viewport 插件进行适配的&#xff1b; 最近在做一个项目&#xff0c;需求是同样的功能&#xff0c;用户可以在电脑上打开操作使用&#xff0c;也可以在手机上登录进去操作使用&#xff0c;但是跳转链接是同一个&am…

前端工程化之vite

vite常用的插件有哪些? vitejs/plugin-vue&#xff1a;用于支持 Vue.js 单文件组件&#xff08;.vue 文件&#xff09; vitejs/plugin-react&#xff1a;用于支持 React 和 JSX 语法 rollup-plugin-visualizer: 用于打包分析 vite-plugin-restart: 文件修改时自动重启vite …

Python 课程18-SQLAlchemy

前言 SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射&#xff08;ORM&#xff09;库&#xff0c;它使得开发者能够通过 Python 代码与数据库进行交互&#xff0c;而不必编写 SQL 查询。SQLAlchemy 提供了对多种数据库的支持&#xff0c;包括 MySQL、PostgreSQL…

电路板上电子元件检测系统源码分享

电路板上电子元件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

【线程】POSIX信号量---基于环形队列的生产消费者模型

信号量概念 这篇文章是以前写的&#xff0c;里面讲了 System V的信号量的概念&#xff0c;POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。 信号量的概念 POSIX信号量的接口 初始化…

Python pypattyrn库:简化设计模式的实现

更多Python学习内容&#xff1a;ipengtao.com 在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。设计模式提供了一种简洁、可复用的代码结构&#xff0c;能够提高代码的灵活性和可维护性。Python 语言作为一种灵活的编程语言&#xff0c;允许开发者使用多种设计模式…

认知杂谈83《同样读书:不同态度,别样收获》

内容摘要&#xff1a; 在知识的海洋中&#xff0c;读书的态度决定了收获的深度。主要有两种读书方式&#xff1a;一是期待书籍像快餐一样提供直接答案&#xff0c;结果常常一无所获&#xff1b;二是将书籍作为探索工具&#xff0c;认真思考&#xff0c;与作者进行深度的“对话”…

Java | Leetcode Java题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; class Solution {public int[] findRightInterval(int[][] intervals) {int n intervals.length;int[][] startIntervals new int[n][2];int[][] endIntervals new int[n][2];for (int i 0; i < n; i) {startIntervals[i][0] inter…

多机部署,负载均衡-LoadBalance

文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理…

面试系列-携程暑期实习一面

Java 基础 1、Java 中有哪些常见的数据结构&#xff1f; 图片来源于&#xff1a;JavaGuide Java集合框架图 Java 中常见的数据结构包含了 List、Set、Map、Queue&#xff0c;在回答的时候&#xff0c;只要把经常使用的数据结构给说出来即可&#xff0c;不需要全部记住 如下&…

Stable Diffusion绘画 | 插件-Addition Networks:单独控制LoRA

当 SD 使用到了进阶阶段&#xff0c;经常需要添加多个 LoRA 来生成图片&#xff0c;因此&#xff0c;提示词中难免会出现一系列的 LoRA 和相关触发词。 但很多时候&#xff0c;我们直接复制网上别人分享的完整提示词&#xff0c;会发现生成出来的效果不一样&#xff0c;这是怎么…

【嵌入式】嵌入式系统和图形用户界面(GUI)开发的图形库和框架

目录 1. **LVGL (Light and Versatile Graphics Library)**2. **TouchGFX**3. **EmWin**4. **Qt for Embedded**5. **SDL (Simple DirectMedia Layer)**6. **Nano-X**7. **Cairo**8. **GTK**9. **Allegro**10. **Qt Quick (QML)**11. **GUIX**12. **FLTK (Fast, Light Toolkit)…

Solidity智能合约中的异常处理(error、require 和 assert)

Solidity 中的三种抛出异常方法&#xff1a;error、require 和 assert 在 Solidity 开发中&#xff0c;异常处理是确保智能合约安全性和正确性的关键步骤。Solidity 提供了三种主要方法来抛出异常&#xff1a;error、require 和 assert。本文将详细介绍这三种方法的用途、实现方…

心觉:如何重塑高效学习的潜意识(2)明白你为什么这么学,才能学得更好

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作181/1000天 上一篇文章我们讲了系统化学习和边学边用两种方法的优缺点 为什么有些人喜欢这种而不是那种 他们的底层心理逻辑不一…

智能识别猫猫

鸡蛋饼是什么猫 今天&#xff0c;有一位爱猫人士找到了我&#xff1a;“9月25日啦&#xff0c;炉石传说重新开服了&#xff01;” 我&#xff1a;“哦&#xff01;我知道这个&#xff0c;你是说&#xff0c;我现在该去领金卡了吗&#xff1f;” 爱猫人士&#xff1a;“不&am…

VMware下Ubuntu找不到共享文件夹

在VMware的设置中已经设置了共享文件夹&#xff0c;在Ubuntu系统中找不到&#xff0c;参考了网上其他的文章&#xff0c;发现还是不能解决问题&#xff0c;无意中尝试了一小步&#xff0c;没想到成功解决了&#xff0c;在这里记录一下。 1&#xff09;首先查询本机的gid 2&…

聚焦Llama新场景和AR眼镜,扎克伯格用AI赋能元宇宙,Meta Connect 2024开发者大会直播约起...

作者&#xff1a;十九 编辑&#xff1a;十九&#xff0c;李宝珠 北京时间 9 月 26 日凌晨 1 点&#xff0c;Meta Connect 2024 开发者大会即将举行&#xff0c;马克扎克伯格将聚焦 AI 和元宇宙&#xff0c;向大家分享 Llama 模型的更多潜在应用&#xff0c;并介绍 Meta 最新产品…

2024年汉字小达人区级自由报名备考冲刺:最新问题和官模题练一练

今天是2024年第十一届汉字小达人的区级自由报名活动的第二天。 我们继续回答几个关于汉字小达人的最新问题&#xff0c;做几道2024年官方模拟题&#xff0c;帮助孩子们少走弯路&#xff0c;再冲刺一般&#xff0c;更精准地备考2024年汉字小达人。 【温馨提示】本专题在比赛期…

芯科科技2024年Works With开发者大会登陆上海,物联网和人工智能的变革性融合带来无限精彩

谷歌、三星等生态大厂将带来重磅演讲和圆桌讨论&#xff0c;亦可切身体验多样化无线技术实作 中国&#xff0c;北京 – 2024年9月25日 – 安全、智能无线连接技术领域的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&#xff0c;NASDAQ&#xff1a;SLAB&#xff09;&a…