news 2026/5/26 16:28:57

实例中我们设置了输入框 input 值 value = {this.state.data}

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
实例中我们设置了输入框 input 值 value = {this.state.data}

React 表单与事件
本章节我们将讨论如何在 React 中使用表单。

HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态。

在 HTML 当中,像 <input>, <textarea>, 和 <select> 这类表单元素会维持自身状态,并根据用户输入进行更新。但在React中,可变的状态通常保存在组件的状态属性中,并且只能用 setState() 方法进行更新。

xiaoheihe.cn/app/bbs/link/172990223
xiaoheihe.cn/app/bbs/link/172990292
xiaoheihe.cn/app/bbs/link/172990366

一个简单的实例
在实例中我们设置了输入框 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 type="text" 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 type="text" 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 value="gg">Google</option>
<option value="rn">Runoob</option>
<option value="tb">Taobao</option>
<option value="fb">Facebook</option>
</select>
</label>
<input type="submit" value="提交" />
</form>
);
}
}

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<FlavorForm />
);

尝试一下 »
多个表单
当你有处理多个 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
name="isGoing"
type="checkbox"
checked={this.state.isGoing}
onChange={this.handleInputChange} />
</label>
<br />
<label>
访客数:
<input
name="numberOfGuests"
type="number"
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 />
);

尝试一下 »
React AJAXReact Refs

1 篇笔记 写笔记
杨笑

117***1030@qq.com

51
父组件和子组件都用表单:

class HelloMessageChild extends React.Component {
render(){
return <div>
<input type="text" 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: '父组件',value1:"子组件"};
this.handleChange = this.handleChange.bind(this);
this.handleChange1 = this.handleChange1.bind(this);
}

handleChange(event) {
this.setState({value: event.target.value});
}
handleChange1(event) {
this.setState({value1: event.target.value});
}
render() {
var value = this.state.value;
var value1 = this.state.value1;
return <div>
<table><tbody>
<tr>
<td>
<input type="text" value={value} onChange={this.handleChange} />
<h4>父组件显示:{value}</h4>
</td>
<td>
<HelloMessageChild myDataProp = {value1} updateStateProp = {this.handleChange1} />
</td>
</tr>
</tbody></table>
</div>


}
}
ReactDOM.render(
<HelloMessage />,
document.getElementById('formexmple')
);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 5:37:27

数字艺术家的秘密武器:5步搞定AI绘画+万物识别联合作业流

数字艺术家的秘密武器&#xff1a;5步搞定AI绘画万物识别联合作业流 作为一名概念设计师&#xff0c;你是否遇到过这样的困扰&#xff1a;用Stable Diffusion生成的精美作品&#xff0c;需要手动为每个元素添加标签&#xff0c;工作量巨大&#xff1f;更糟的是&#xff0c;当你…

作者头像 李华
网站建设 2026/5/20 13:00:51

零基础入门:5分钟学会编写李跳跳规则

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式李跳跳规则学习平台&#xff0c;包含&#xff1a;1)规则语法图解教程 2)实时演练沙盒环境 3)常见错误自动检测 4)渐进式难度案例库。采用引导式教学&#xff0c;用户…

作者头像 李华
网站建设 2026/5/23 4:54:14

电子制造检测:PCB板焊接质量AI判定系统

电子制造检测&#xff1a;PCB板焊接质量AI判定系统 引言&#xff1a;从人工质检到智能视觉的工业升级 在现代电子制造产线中&#xff0c;PCB&#xff08;印刷电路板&#xff09;焊接质量检测是决定产品良率的关键环节。传统依赖人工目检的方式存在效率低、标准不一、漏检率高…

作者头像 李华
网站建设 2026/5/24 6:01:48

AI识物全攻略:从环境搭建到模型调优一站式教程

AI识物全攻略&#xff1a;从环境搭建到模型调优一站式教程 在图像识别项目中&#xff0c;环境配置往往是让开发者头疼的第一道门槛。无论是识别动植物、日常物品还是特殊场景&#xff0c;一个标准化的部署方案能大幅提升开发效率。本文将带你从零开始&#xff0c;使用预置环境镜…

作者头像 李华
网站建设 2026/5/20 20:47:13

气象云图分类:识别积雨云、卷云等典型云系

气象云图分类&#xff1a;识别积雨云、卷云等典型云系 引言&#xff1a;从通用图像识别到专业气象分析的跨越 在人工智能视觉领域&#xff0c;万物识别-中文-通用领域模型的出现标志着AI对现实世界理解能力的一次重大跃迁。这类模型不仅能够识别日常物体&#xff0c;还能通过迁…

作者头像 李华
网站建设 2026/5/20 13:00:59

企业级开发中的JREBEL/XREBEL激活实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个团队许可证管理工具&#xff0c;支持以下功能&#xff1a;1. 集中管理JREBEL/XREBEL许可证&#xff1b;2. 自动分配和回收许可证&#xff1b;3. 监控许可证使用情况&#…

作者头像 李华