表单
select 标签
在HTML中,<select > 创建一个下拉列表,selected 属性可以设置初始化选中

React中,并不使用这个 selected 属性,而是在根 select 标签中使用了一个 value 属性,这使得受控组件使用更方便,因为你只需要更新一处即可。


textarea标签
在HTML中,<textarea>元素通过它的子节点定义了它的文本值

在React中,<textarea>的赋值使用 value属性替代,这样一来,表单中 <textarea> 的书写方式接近于单行文本框。

这使 <input type="text" > , <textarea> 和 <select > 都以类似的方式工作,他们都接收一个 value 属性可以用来实现一个受控组件。
处理多个输入元素
当需要处理多个受控的 input 元素时,可以为每个元素添加一个 name 属性,并且让处理函数 根据 event.target.name 的值来选择相应的 input 。
注意:this.setState ( {
[ name ] : value
} )
使用了ES6 计算的属性名称 语法 来更新与给定输入名称(name) 相对应的 state 键。
import React, { Component } from 'react';
export default class App extends Component {
state={
username:'jack',
password:'123',
email:'12345@qq.com'
}
handleInputChange=(event)=>{
this.setState({
[event.target.name]:event.target.value
})
}
render() {
const {username,password,email}=this.state;
return (
<div>
<form>
<label htmlFor="username">用户名:</label>
<input type="text" id="username" name="username" value={username} onChange={this.handleInputChange}/>
<label htmlFor="pwd">密码:</label>
<input type="password" id="pwd" name="password" value={password} onChange={this.handleInputChange}/>
<label htmlFor="mail">邮箱:</label>
<input type="email" id="mail" name="email" value={email} onChange={this.handleInputChange}/>
</form>
</div>
)
}
}
![]()
file input 标签
在HTML中,<input type="file" > 可以让用户从设备存储器中选择一个或多个文件上传到服务器,或者通过 JavaScript 使用 File API 操作。
因为它的值是只读的,它的值只能由用户设置,而不是以编程方式设置,所以它是 React 中的不受控组件。
import React, { Component } from 'react'
export default class App extends Component {
handleSubmit = (event) => {
event.preventDefault();
console.log(this.input.files[0].name);
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<input type="file" ref={input=>this.input=input}/>
<button type="submit">Submit</button>
</form>
</div>
)
}
}



浙公网安备 33010602011771号