React 中 props 的最常用用法精选+useContext

✅ React 最常用 props 用法 10 例


✅ 1. 传递字符串 / 数字 / 布尔值

function UserCard({ name, age, isVip }) {return (<div>{name} - {age} - {isVip ? 'VIP' : '普通用户'}</div>);
}<UserCard name="张三" age={18} isVip={true} />

✅ 2. 传递函数(事件)

function Button({ onClick }) {return <button onClick={onClick}>点我</button>;
}<Button onClick={() => alert('你好!')} />

✅ 3. 传递 children(嵌套内容)

function Layout({ children }) {return <div className="layout">{children}</div>;
}<Layout><p>这是页面内容</p>
</Layout>

✅ 4. 解构 props

function Welcome({ name }) {return <h1>欢迎 {name}</h1>;
}

✅ 5. 设置默认值

function Title({ text = "默认标题" }) {return <h2>{text}</h2>;
}<Title /> // 显示“默认标题”

✅ 6. 传递数组 / 对象

function List({ items }) {return <ul>{items.map(item => <li key={item}>{item}</li>)}</ul>;
}<List items={['苹果', '香蕉']} />

✅ 7. props 展开传递(...props)

function Input(props) {return <input {...props} />;
}<Input type="text" placeholder="请输入..." />

✅ 8. props 类型校验(开发时用)

import PropTypes from 'prop-types';function User({ name }) {return <div>{name}</div>;
}User.propTypes = {name: PropTypes.string.isRequired,
};

✅ 9. 使用函数+参数(如事件传参)

function Item({ id, onDelete }) {return <button onClick={() => onDelete(id)}>删除</button>;
}<Item id={1} onDelete={(id) => console.log('删除', id)} />

✅ 10. 父传子 + 子组件回调

function Child({ onLogin }) {return <button onClick={onLogin}>登录</button>;
}function Parent() {const handleLogin = () => console.log("登录成功!");return <Child onLogin={handleLogin} />;
}

✅ 补充:ref 转发(略高阶)

const Input = React.forwardRef((props, ref) => (<input ref={ref} {...props} />
));function App() {const ref = React.useRef();return (<><Input ref={ref} /><button onClick={() => ref.current.focus()}>聚焦</button></>);
}

✅ 小结:最常见的 props 类型

类型用途示例
string展示文字内容title="标题"
number计数、评分等count={5}
boolean控制显示/开关isOpen={true}
function绑定事件onClick={() => {}}
children嵌套组件内容<Comp>内容</Comp>
array列表/选项items={[1, 2, 3]}
object配置项、用户信息等user={{ name: '张三' }}
...props展开传递给 HTML 元素<button {...props}>按钮</button>

useContext —— 它是 React 中用于跨组件传递数据的一个非常重要的方式,属于“替代 props 多层传递”的方案。

useContext 和 props 的关系、区别、使用场景与完整例子,并结合 props 的理解一并讲清楚。


✅ React 中 useContext 与 props 的配合与区别


🔍 一句话理解

  • props:父 → 子逐层传递,显式、灵活但繁琐。

  • context + useContext:全局/跨层传递,适合状态共享,如主题、语言、用户登录信息等。


✅ 1. useContext 基本使用步骤

🔧 第一步:创建 Context

import { createContext } from "react";const UserContext = createContext(null);

🔧 第二步:提供 Provider,在顶层注入值

function App() {return (<UserContext.Provider value={{ name: "张三", isVip: true }}><Page /></UserContext.Provider>);
}

🔧 第三步:在任意子组件中使用 useContext 获取值

import { useContext } from "react";function Page() {const user = useContext(UserContext);return <div>你好,{user.name},VIP:{user.isVip ? "是" : "否"}</div>;
}

✅ 2. useContext vs props:区别对比

项目propsuseContext
数据传递方式父组件手动一层一层传递提供一次,全局可用
灵活性更灵活,每个组件单独定义更全局,统一管理
代码复杂度嵌套层级多时变复杂跨层更简单,避免“prop drilling”
场景大多数局部传值场景全局状态,如登录用户、主题、权限、多语言等
性能影响精细控制每一层渲染变更会导致所有消费组件重新渲染(需 memo 优化)

✅ 3. useContext + props 混用

const ThemeContext = createContext("light");function Button({ label }) {const theme = useContext(ThemeContext);return <button className={`btn-${theme}`}>{label}</button>;
}function App() {return (<ThemeContext.Provider value="dark"><Button label="点击我" /></ThemeContext.Provider>);
}
  • label 是 props 传递的内容

  • theme 是 context 提供的“全局数据”

二者结合用是常见写法。


✅ 4. useContext + props 高级配合场景举例

示例:显示用户名称并支持外部传递自定义 greeting

const UserContext = createContext({ name: "匿名用户" });function Welcome({ greeting = "你好" }) {const user = useContext(UserContext);return <h1>{greeting},{user.name}</h1>;
}function App() {return (<UserContext.Provider value={{ name: "小红" }}><Welcome greeting="欢迎回来" /></UserContext.Provider>);
}

✅ 5. 注意事项

  • 不推荐把所有数据都放在 context 中,会导致过度渲染。

  • 用 context 的时候,推荐拆小组件 + memo 优化

  • 可以结合 useReducer + useContext 实现简易状态管理(类 Redux)。


✅ 总结一下

方式说明
props用于组件直接传递数据,一层层传
useContext用于全局或跨层组件数据共享(主题/用户/语言)
混合使用最常见写法:context 提供环境,props 控制行为

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

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

相关文章

离散型制造企业的可视化破局:设备OEE动态看板与工艺路径模拟实践

内容摘要离散型制造企业面临着设备效率低下、生产过程不透明、工艺路径复杂等诸多挑战。如何通过可视化手段提升设备效率和生产透明度&#xff0c;成为企业亟待解决的问题。设备整体效率&#xff08;OEE&#xff09;动态看板和工艺路径模拟是两个关键的可视化工具&#xff0c;能…

在Tailwind Css中如何书写flex布局

仅供参考 文章目录一、启用 flex 布局二、行内 flex 布局三、方向控制四、对齐方式五、子元素控制1、控制子元素的宽度是否可伸缩2、控制子元素顺序3、控制子元素间的间隙4、控制子元素是否可换行显示一、启用 flex 布局 设置 class“flex” 启用 flex 布局 <template>…

交通出行大前端与 AI 融合:智能导航与出行预测

交通出行类大前端应用&#xff08;导航APP、打车软件、公交地铁小程序等&#xff09;是连接用户与出行服务的核心载体&#xff0c;其核心价值在于“高效规划路径、精准规避拥堵、适配个性化需求”。传统导航依赖固定规则&#xff08;如“最短路径优先”&#xff09;和历史数据&…

csc(x)积分推导

在MATLAB中同时绘制 sin⁡(x), csc(x) 和 ln⁡∣tan⁡(x/2)∣的函数图像&#xff0c;需要处理函数的奇点&#xff08;如 csc⁡(x) 在 sin⁡(x)0 时无定义&#xff0c;ln⁡∣tan⁡(x/2)∣ 在 xkπ 时无定义&#xff09;&#xff08;deepseek生成matlab代码&#xff09;% 定义x范…

rtsp协议之.c++实现,rtsp,rtp协议框架,模拟多路音视频h264,265,aac,数据帧传输,接收(二)

rtsp协议之.c实现&#xff0c;rtsp&#xff0c;rtp协议框架&#xff0c;模拟多路音视频h264&#xff0c;265&#xff0c;aac&#xff0c;数据帧传输&#xff0c;接收&#xff08;二&#xff09; 1、RTSP 服务器核心&#xff1a;处理 RTSP 会话管理、请求解析和响应生成 2、媒体…

网络性能与应用性能的协同优化研究:基于小波变换与CNN的图像分类系统

网络性能与应用性能的协同优化研究&#xff1a;基于小波变换与CNN的图像分类系统 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 摘要 本文研究了网络性能&#xff08;延迟、带宽、丢…

【网络安全领域】CTF竞赛指南:赛事详解、热门平台与信息获取方式

CTF&#xff08;Capture The Flag&#xff09;&#xff0c;中文称为夺旗赛&#xff0c;是网络安全领域中一种备受关注和欢迎的竞赛形式。以下是关于 CTF 竞赛的详细介绍&#xff0c;以及一些参赛平台和相关咨询途径&#xff1a; CTF 竞赛详解 起源&#xff1a;CTF 起源于 199…

进程(以及系统调用和库函数概念)

计算机管理硬件&#xff1a;先去组织起来再去描述起来&#xff08;类比先去组织小组&#xff0c;再去详细描述工作&#xff09;系统调用和库函数概念&#xff1a;系统就像是银行&#xff0c;会去防着我们&#xff0c;但是会释放一些接口用于我们使用&#xff0c;这个就是叫做系…

linux + 宝塔面板 部署 django网站 启动方式:uwsgi 和gunicorn如何选择 ?

启动方式:uwsgi 和gunicorn如何选择 ? 项目uWSGIGunicorn协议uWSGI 协议&#xff08;可用 HTTP/socket&#xff09;HTTP 协议启动方式命令或 .ini 配置文件命令参数或 systemd 配置兼容框架支持 WSGI、uWSGI、FastCGI 等仅支持 WSGI性能高性能、极可调高性能、默认参数也够用配…

基于有监督学习的主动攻击检测系统

核心功能&#xff1a;登录注册功能主仪表板功能&#xff1a;实时展示检测结果和图表分析&#xff0c;模型准确率、攻击次数等。数据管理功能&#xff1a;加载训练数据、预处理数据&#xff08;使用开源KDD数据集做为模型训练数据)。模型训练功能&#xff1a;支持随机森林、支持…

simulink系列之模型接口表生成及自动连线脚本

总目录 simulink系列之汽车应用层信号处理 第一章 simulink信号处理——debounce 第二章 simulink接口表生成及自动连线脚本 目录 前言 一、simulink接口表生成脚本 1.使用方法&#xff1a; 二、模型整理连线脚本 1.使用方法&#xff1a; 总结 前言 本系列主要围绕作者采用si…

Eureka+LoadBalancer实现服务注册与发现

目录 一、相关文章 二、兼容说明 三、服务注册到EurekaServer 四、服务发现 五、LoadBalancer负载均衡 一、相关文章 基础工程&#xff1a;gradle7.6.1springboot3.2.4创建微服务工程-CSDN博客 Eureka服务端启动&#xff1a;Eureka服务端启动-CSDN博客 LoadBalancer官方…

数据存储方案h5py

对于百万级别的大规模数据&#xff08;假设 N > 1,000,000&#xff09;&#xff0c;在保证读取速度的前提下&#xff0c;需要综合考虑 存储效率、I/O 吞吐 和 内存管理。以下是针对超大规模数据的优化方案&#xff1a;&#x1f680; 终极方案&#xff1a;HDF5 (h5py) 分块存…

ARINC818协议综述

概要 航天领域ARINC818协议 协议的视频帧 协议的层次 帧格式 容器 FC协议的5个层次 8b10b编码 SOF EOF IDLEARINC818视频传输协议 ARINC818协议的容器系统 帧头控制协议FHCP 光纤通道协议 FC-AV ARINC818行场同步解析&#xff0c;上图时序图是关于行场同步小信号相关。ARINC818…

专题 二分法:查找与判定

概念解释 概述 二分法在算法竞赛中一般有这么一个用途&#xff1a;在一个具有单调性的解空间中找到符合题意的一个可行解。下面解释几个专有名词&#xff1a; 解空间 很简单&#xff0c;就是可能存在解的逻辑区域。这个在算法入门时应提到。 可行解 符合题意的解 单调性 …

硬核电子工程:从硅片到系统的全栈实战指南—— 融合电路理论、嵌入式开发与PCB设计的工程艺术

一、电路基础&#xff1a;硬件设计的底层逻辑1.1 基尔霍夫定律的硬件实现// STM32验证KVL定律&#xff08;ADC采样法&#xff09; void verify_kvl() {ADC_Enable(ADC1); // 启用ADCfloat Vr1 read_ADC(PA0) * 3.3 / 4096; // 读取R1电压float Vr2 read_ADC(PA1) * 3.3 / 4…

Linux网络:序列化与反序列化

引入&#xff1a;面向字节流 TCP是面向字节流的&#xff0c;如果按照字节流来读取信息&#xff0c;可能会出问题 比如客户传入“1100”&#xff0c;服务器读入“11”&#xff0c;后面的00被当作下一条信息&#xff0c;这就出问题了 我们可以将多个信息合并为一个字符串 在发送信…

二、Spark 开发环境搭建 IDEA + Maven 及 WordCount 案例实战

作者&#xff1a;IvanCodes 日期&#xff1a;2025年7月20日 专栏&#xff1a;Spark教程 本教程将从零开始&#xff0c;一步步指导您如何在 IntelliJ IDEA 中搭建一个基于 Maven 和 Scala 的 Spark 开发环境&#xff0c;并最终完成经典的 WordCount 案例。 一、创建 Maven 项目…

【python】算法实现1

实现一个动态规划算法 def dynamic_programming_example(n: int) -> List[int]:"""动态规划示例&#xff1a;计算斐波那契数列参数:- n: 斐波那契数列的项数返回:- List[int]: 斐波那契数列前n项"""if n < 0:return []elif n 1:return […

C++控制台贪吃蛇开发:从0到1绘制游戏世界

资料合集下载链接: ​​https://pan.quark.cn/s/472bbdfcd014​ 本文将带你一步步实现以下目标: 初始化游戏元素(边界、蛇、食物)的数据。 绘制静态的游戏边界(墙)。 在指定位置显示蛇和食物。 学习并使用Windows API来精确定位光标,实现“指哪打哪”的绘图。 隐藏闪烁…