表单
获取输入框里面的 input
- React 里面的 input 通过 e.target.value 来获取
javascript
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {
value: ""
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event){
this.setState({
value:event.target.value
})
}
handleSubmit(event){
alert("提交的名字:"+ this.state.value);
event.preventDefault();
}
render(){
return (
<form onSubmit={this.handleSubmit}>
<label>名字:
<input type="text" value={this.state.value} onChange={this.handleChange}>
</label>
<input type="submit" value="提交">
</form>
)
}
}
通过 value 属性绑定输入值,直接获取属性值的时候就是 e.target.value
textarea 标签
javascript
class EssayForm extends React.Component {
constructor(props) {
super(props);
this.state = {
value: "请撰写一篇关于你喜欢的 DOM 元素的文章.",
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({ value: event.target.value });
}
handleSubmit(event) {
alert("提交的文章: " + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
文章:
<textarea value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="提交" />
</form>
);
}
}
select 标签
- React 由于 selected 属性缘故,子选项默认被选中,React 并不会使用 selected 属性,而是在根 select 标签上使用 value 属性
javascript
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("你喜欢的风味是: " + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
选择你喜欢的风味:
<select value={this.state.value} onChange={this.handleChange}>
<option value="grapefruit">葡萄柚</option>
<option value="lime">酸橙</option>
<option value="coconut">椰子</option>
<option value="mango">芒果</option>
</select>
</label>
<input type="submit" value="提交" />
</form>
);
}
}
多个输入开始
当处理多个 input 元素的时候,我们可以给每个元素添加 name 属性,并让处理函数依据 event.target.name 值 选择要执行的操作
javascript
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>
);
}
}
总结
表单内的元素可以通过设置 value 属性来赋值
获取值 e.target.value