我想知道如何用一個handleChange方法處理狀態變化。Handle狀態在一個句柄中的變化用一個handleChange方法爲selectFields和TextFields
我處理了兩個帶有handleChange的文本字段,但我無法弄清楚如何使用相同的handleChange方法處理SelectField上的更改。
當從風箏衝浪跳水和的console.log this.state改變的點型我得到這個:
form
:
description: "This is a amazing spot in Spain."
name: "Blue water"
spotType: "Kitesurfing"
undefined: undefined <-- this is from the SelectField, when changing from Kitesurfing to Diving..
AddASpot.js
import React, { Component } from "react";
import TextField from "material-ui/TextField";
import SelectField from "material-ui/SelectField";
import MenuItem from "material-ui/MenuItem";
import RaisedButton from "material-ui/RaisedButton";
class AddASpot extends Component {
constructor(props) {
super(props);
this.state = {
form: {
spotType: "Kitesurfing"
}
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange = event => {
const target = event.target;
const value = target.type === "checkbox" ? target.checked : target.value;
const name = target.name;
const form = Object.assign({}, this.state.form);
form[name] = value;
this.setState({ form });
};
handleSubmit =() => {
console.log(this.state);
};
render() {
return (
<div>
<h1>Add a new Spot</h1>
<TextField
name="name"
onChange={this.handleChange}
hintText="Name of Spot"
/>
<br />
<SelectField
floatingLabelText="Spot Type"
name="spotType"
value={this.state.form.spotType}
onChange={this.handleChange}
>
<MenuItem value="Diving" primaryText="Diving" />
<MenuItem value="Kitesurfing" primaryText="Kitesurfing" />
<MenuItem value="Surfing" primaryText="Surfing" />
<MenuItem value="Spearfishing" primaryText="Spearfishing" />
</SelectField>
<br />
<TextField
name="description"
onChange={this.handleChange}
hintText="Description of the Spot"
multiLine={true}
rows={3}
rowsMax={4}
/>
<br />
<RaisedButton
onClick={this.handleSubmit}
label="Add Spot"
primary={true}
/>
</div>
);
}
}
export default AddASpot;
請爲其添加plunker /小提琴 –