我们将讨论如何在 React 中使用表单单元素与 Reac
React 表单与事件本章节我们将讨论如何在 React 中使用表单。HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态。在 HTML 当中像 input, textarea, 和 select 这类表单元素会维持自身状态并根据用户输入进行更新。但在React中可变的状态通常保存在组件的状态属性中并且只能用 setState() 方法进行更新。一个简单的实例在实例中我们设置了输入框 input 值value {this.state.data}。在输入框值发生变化时我们可以更新 state。我们可以使用onChange事件来监听 input 的变化并修改 state。React 实例class HelloMessage extends React.Component { constructor(props) { super(props); this.state {value: Hello Runoob!}; this.handleChange this.handleChange.bind(this); } handleChange(event) { this.setState({value: event.target.value}); } render() { var value this.state.value; return div input typetext value{value} onChange{this.handleChange} / h4{value}/h4 /div; } } const root ReactDOM.createRoot(document.getElementById(root)); root.render( HelloMessage / );上面的代码将渲染出一个值为 Hello Runoob! 的 input 元素并通过 onChange 事件响应更新用户输入的值。实例 2在以下实例中我们将为大家演示如何在子组件上使用表单。onChange方法将触发 state 的更新并将更新的值传递到子组件的输入框的value上来重新渲染界面。你需要在父组件通过创建事件句柄 (handleChange) 并作为 prop (updateStateProp) 传递到你的子组件上。React 实例class Content extends React.Component { render() { return ( div input typetext value{this.props.myDataProp} onChange{this.props.updateStateProp} / h4{this.props.myDataProp}/h4 /div ); } } class HelloMessage extends React.Component { constructor(props) { super(props); this.state { value: Hello Runoob! }; this.handleChange this.handleChange.bind(this); } handleChange(event) { this.setState({ value: event.target.value }); } render() { var value this.state.value; return ( div Content myDataProp{value} updateStateProp{this.handleChange} / /div ); } } const root ReactDOM.createRoot(document.getElementById(root)); root.render(HelloMessage /);Select 下拉菜单在 React 中不使用 selected 属性而在根 select 标签上用 value 属性来表示选中项。React 实例class FlavorForm extends React.Component { constructor(props) { super(props); this.state {value: coconut}; this.handleChange this.handleChange.bind(this); this.handleSubmit this.handleSubmit.bind(this); } handleChange(event) { this.setState({value: event.target.value}); } handleSubmit(event) { alert(Your favorite flavor is: this.state.value); event.preventDefault(); } render() { return ( form onSubmit{this.handleSubmit} label 选择您最喜欢的网站 select value{this.state.value} onChange{this.handleChange} option valueggGoogle/option option valuernRunoob/option option valuetbTaobao/option option valuefbFacebook/option /select /label input typesubmit value提交 / /form ); } } const root ReactDOM.createRoot(document.getElementById(root)); root.render( FlavorForm / );https://avg.163.com/topic/detail/9240046https://avg.163.com/topic/detail/9240085https://avg.163.com/topic/detail/9240116https://avg.163.com/topic/detail/9240160https://avg.163.com/topic/detail/9240195https://avg.163.com/topic/detail/9240045https://avg.163.com/topic/detail/9240084https://avg.163.com/topic/detail/9240115https://avg.163.com/topic/detail/9240144https://avg.163.com/topic/detail/9240043https://avg.163.com/topic/detail/9240086https://avg.163.com/topic/detail/9240118https://avg.163.com/topic/detail/9240146https://avg.163.com/topic/detail/9240174https://avg.163.com/topic/detail/9240044https://avg.163.com/topic/detail/9240088https://avg.163.com/topic/detail/9240124https://avg.163.com/topic/detail/9240158https://avg.163.com/topic/detail/9240193https://avg.163.com/topic/detail/9234504https://avg.163.com/topic/detail/9234511https://avg.163.com/topic/detail/9234496https://avg.163.com/topic/detail/9234503https://avg.163.com/topic/detail/9234509https://avg.163.com/topic/detail/9234493https://avg.163.com/topic/detail/9234491https://avg.163.com/topic/detail/9234501https://avg.163.com/topic/detail/9234508https://avg.163.com/topic/detail/9234494https://avg.163.com/topic/detail/9234499https://avg.163.com/topic/detail/9234507https://avg.163.com/topic/detail/9234495https://avg.163.com/topic/detail/9234506https://avg.163.com/topic/detail/9234492https://avg.163.com/topic/detail/9234486https://avg.163.com/topic/detail/9234487https://avg.163.com/topic/detail/9234488多个表单当你有处理多个 input 元素时你可以通过给每个元素添加一个 name 属性来让处理函数根据 event.target.name 的值来选择做什么。React 实例class Reservation extends React.Component { constructor(props) { super(props); this.state { isGoing: true, numberOfGuests: 2 }; this.handleInputChange this.handleInputChange.bind(this); } handleInputChange(event) { const target event.target; const value target.type checkbox ? target.checked : target.value; const name target.name; this.setState({ [name]: value }); } render() { return ( form label 是否离开: input nameisGoing typecheckbox checked{this.state.isGoing} onChange{this.handleInputChange} / /label br / label 访客数: input namenumberOfGuests typenumber value{this.state.numberOfGuests} onChange{this.handleInputChange} / /label /form ); } }React 事件以下实例演示通过 onClick 事件来修改数据React 实例class HelloMessage extends React.Component { constructor(props) { super(props); this.state {value: Hello Runoob!}; this.handleChange this.handleChange.bind(this); } handleChange(event) { this.setState({value: 菜鸟教程}) } render() { var value this.state.value; return div button onClick{this.handleChange}点我/button h4{value}/h4 /div; } } const root ReactDOM.createRoot(document.getElementById(root)); root.render( HelloMessage / );当你需要从子组件中更新父组件的state时你需要在父组件通过创建事件句柄 (handleChange) 并作为 prop (updateStateProp) 传递到你的子组件上。实例如下React 实例class Content extends React.Component { render() { return div button onClick {this.props.updateStateProp}点我/button h4{this.props.myDataProp}/h4 /div } } class HelloMessage extends React.Component { constructor(props) { super(props); this.state {value: Hello Runoob!}; this.handleChange this.handleChange.bind(this); } handleChange(event) { this.setState({value: 菜鸟教程}) } render() { var value this.state.value; return div Content myDataProp {value} updateStateProp {this.handleChange}/Content /div; } } const root ReactDOM.createRoot(document.getElementById(root)); root.render( HelloMessage / );

相关新闻

5846345645

5846345645

2026/5/17 0:18:04 阅读更多 →
[驱动进阶——MIPI摄像头驱动(四)]rk3588+OV13855摄像头驱动加载过程详细解析第三部分——CIF驱动+SDITF驱动

[驱动进阶——MIPI摄像头驱动(四)]rk3588+OV13855摄像头驱动加载过程详细解析第三部分——CIF驱动+SDITF驱动

2026/5/17 0:18:03 阅读更多 →
[驱动进阶——MIPI摄像头驱动(三)]rk3588+OV13855摄像头驱动加载过程详细解析第二部分——DPHY驱动+CSI驱动

[驱动进阶——MIPI摄像头驱动(三)]rk3588+OV13855摄像头驱动加载过程详细解析第二部分——DPHY驱动+CSI驱动

2026/5/17 0:18:02 阅读更多 →

最新新闻

手游漏洞挖掘入门:从网络抓包到逻辑漏洞实战分析

手游漏洞挖掘入门:从网络抓包到逻辑漏洞实战分析

1. 项目概述:从“玩游戏”到“找漏洞”的思维跃迁很多朋友在手游里投入了大量时间,从刷副本到研究配队,乐此不疲。但你是否想过,除了“玩”游戏,你还可以“看”游戏?我说的“看”,不是看剧情动画…

2026/7/3 12:31:13 阅读更多 →
CVE-2017-10271漏洞深度剖析:从XML反序列化到WebLogic远程代码执行

CVE-2017-10271漏洞深度剖析:从XML反序列化到WebLogic远程代码执行

1. 项目概述与背景今天我们来深入聊聊一个在安全圈里“经久不衰”的经典漏洞——CVE-2017-10271。这个漏洞的官方名称是“Oracle WebLogic Server WLS Security Component Remote Code Execution Vulnerability”,翻译过来就是WebLogic服务器WLS安全组件的远程代码执…

2026/7/3 12:31:13 阅读更多 →
STM32L4S5ZI与MAX9744构建高效音频增强系统

STM32L4S5ZI与MAX9744构建高效音频增强系统

1. MAX9744与STM32L4S5ZI的音频增强方案概述在嵌入式音频应用领域,如何在小体积、低功耗的前提下实现高质量的音频放大一直是工程师面临的挑战。MAX9744作为一款高效Class D音频功率放大器,配合STM32L4S5ZI微控制器的强大处理能力,能够构建出…

2026/7/3 12:29:13 阅读更多 →
制药企业2026年智能化改造项目备案数据分析

制药企业2026年智能化改造项目备案数据分析

2026年上半年,吉林省鑫辉药业有限公司连续完成多个项目的备案与审批,为制药企业智能化转型提供了可参考的案例数据。一、智能化改扩建工程(2026年2月备案)项目利用原有土地进行改扩建,分两期建设。一期改扩建约15713.1…

2026/7/3 12:27:12 阅读更多 →
hwinfo:跨平台硬件信息库的现代C++解决方案

hwinfo:跨平台硬件信息库的现代C++解决方案

hwinfo:跨平台硬件信息库的现代C解决方案 【免费下载链接】hwinfo cross platform C library for hardware information (CPU, RAM, GPU, ...) 项目地址: https://gitcode.com/gh_mirrors/hw/hwinfo 在当今复杂的软件开发环境中,获取系统硬件信息…

2026/7/3 12:25:08 阅读更多 →
Excel文件XXE攻击:从原理到防御的完整指南

Excel文件XXE攻击:从原理到防御的完整指南

1. 项目概述:当日常办公工具成为攻击入口你可能每天都在用Excel处理数据、制作报表,觉得它就是个再普通不过的办公软件。但你想过吗,一个看似无害的.xlsx文件,也可能成为攻击者撬开你系统大门的“特洛伊木马”。今天要聊的&#x…

2026/7/3 12:25:08 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻