本章节我们将讨论如何在 React 中使用表单DFS。
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/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/9234495https://avg.163.com/topic/detail/9234506https://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/9234486https://avg.163.com/topic/detail/9234487https://avg.163.com/topic/detail/9234492https://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 / );

相关新闻

基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)

基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)

2026/5/17 0:17:59 阅读更多 →
宝塔面板一键部署 Emlog 教程:从服务器准备到站点上线全攻略

宝塔面板一键部署 Emlog 教程:从服务器准备到站点上线全攻略

2026/5/17 0:17:59 阅读更多 →
爬虫项目:利用 Playwright 和 Asyncio 高效收集酒店信息

爬虫项目:利用 Playwright 和 Asyncio 高效收集酒店信息

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

最新新闻

猫抓浏览器插件:你的终极网页资源嗅探与下载解决方案

猫抓浏览器插件:你的终极网页资源嗅探与下载解决方案

猫抓浏览器插件:你的终极网页资源嗅探与下载解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容无处不在的今天&#x…

2026/7/3 19:00:51 阅读更多 →
从数据分布角度理解:为什么不同任务要用不同的损失函数?

从数据分布角度理解:为什么不同任务要用不同的损失函数?

从数据分布角度理解:为什么不同任务要用不同的损失函数? 一、先说清楚:损失函数到底是什么? 在机器学习里,我们可以先把模型想象成一个“会猜答案的机器”。 给它一个输入,比如一张图片、一段文字、一个学生的学习时长,它会输出一个预测结果。 比如: 输入:学习时间…

2026/7/3 18:58:50 阅读更多 →
三重降压转换方案在嵌入式系统中的应用与优化

三重降压转换方案在嵌入式系统中的应用与优化

1. 为什么需要三重降压转换方案在嵌入式系统和工业控制领域,多电压轨供电已经成为标配需求。以典型的ARM Cortex-M4应用为例,核心处理器需要1.2V供电,外设接口需要3.3V,而模拟电路部分则可能需要1.8V。传统方案采用多个独立DC-DC转…

2026/7/3 18:58:50 阅读更多 →
ppt模板_0139_黑蝙蝠侠

ppt模板_0139_黑蝙蝠侠

PPT模板分享

2026/7/3 18:56:50 阅读更多 →
LLM安全护栏工程实战2026:多层防御体系下的Prompt注入、越狱与内容审核

LLM安全护栏工程实战2026:多层防御体系下的Prompt注入、越狱与内容审核

引言 2026年,当AI Agent被部署到金融交易、医疗诊断、法律咨询等关键领域时,安全问题从"锦上添花"变成了"生死攸关"。AAAI 2026上,LLM安全相关的论文数量同比增长了300%。Prompt注入已被OWASP列为LLM应用十大安全风险之首…

2026/7/3 18:56:50 阅读更多 →
为什么遇到分式可以“颠倒”过来算?

为什么遇到分式可以“颠倒”过来算?

为什么可以“颠倒”过来算? 这种“颠倒”操作看起来有些不可思议,但它背后有非常严密的数学逻辑支撑。 简单来说:“颠倒”其实是在利用极限的倒数性质。只要极限不为 0,我们就可以把整个算式翻转过来算,最后再把结果翻…

2026/7/3 18:52:49 阅读更多 →

日新闻

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 阅读更多 →

周新闻

月新闻