变化:
商店中的Stepper
状态数据,所以,只要你将增加,它会自动重新渲染表新条目。
2.定义一个onTouchTap
事件与RaisedButton
按钮,并在点击该按钮时将新数据推入状态变量。
3.要么你必须使用ref
为uncontrolled component
或定义state
变量每个输入字段,让输入字段值内提交功能。通过环路创建时
4.分配唯一密钥到每个元素。
全码:
class Stepper extends React.Component {
constructor(){
super();
this.state = {
genData : [
{
firstName: "foo",
lastName: "boo",
type: "male",
email: "[email protected]"
}
]
}
this._handleSubmit = this._handleSubmit.bind(this);
}
_handleSubmit(){
let genData = this.state.genData.slice();
genData.push({
firstName: this.fName.props.value,
lastName: this.lName.props.value,
type: this.type.props.value,
email: this.email.props.value
});
this.setState({ genData })
}
render() {
return (
<div>
<TextField
ref={el => this.fName = el}
hintText="First Name"
/>
<TextField
ref={el => this.lName = el}
hintText="Last Name"
/>
<TextField
ref={el => this.type = el}
hintText="Type"
/>
<TextField
ref={el => this.email = el}
hintText="Email"
/>
<RaisedButton onTouchTap={this._handleSubmit} label="Submit" primary={true}/>
<Table>
<TableHeader>
<TableRow>
<TableHeaderColumn>First Name</TableHeaderColumn>
<TableHeaderColumn>Last Name</TableHeaderColumn>
<TableHeaderColumn>Type</TableHeaderColumn>
<TableHeaderColumn>Email</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody>
{this.state.genData.map((row, i) => (
<TableRow key={i}>
<TableRowColumn>{row.firstName}</TableRowColumn>
<TableRowColumn>{row.lastName}</TableRowColumn>
<TableRowColumn>{row.type}</TableRowColumn>
<TableRowColumn>{row.email}</TableRowColumn>
</TableRow>
))}
</TableBody>
</Table>
</div>
);
}
}
更新:
使用此代码控制组件:
class Stepper extends React.Component {
constructor(){
super();
this.state = {
fName: '',
lName: '',
type: '',
email: '',
genData : [
{
firstName: "foo",
lastName: "boo",
type: "male",
email: "[email protected]"
}
]
}
this._handleSubmit = this._handleSubmit.bind(this);
}
_handleSubmit(){
let genData = this.state.genData.slice();
genData.push({
firstName: this.state.fName,
lastName: this.state.lName,
type: this.state.type,
email: this.state.email
});
this.setState({
genData,
fName: '',
lName: '',
type: '',
email: ''
})
}
onChange(fieldName, value){
this.setState({
[fieldName]: value
});
}
render() {
return (
<div>
<TextField
value={this.state.fName}
onChange={(e,value) => this.onChange('fName', value)}
hintText="First Name"
/>
<TextField
value={this.state.lName}
onChange={(e,value) => this.onChange('lName', value)}
hintText="Last Name"
/>
<TextField
value={this.state.type}
onChange={(e,value) => this.onChange('type', value)}
hintText="Type"
/>
<TextField
value={this.state.email}
onChange={(e,value) => this.onChange('email', value)}
hintText="Email"
/>
<RaisedButton onTouchTap={this._handleSubmit} label="Submit" primary={true}/>
<Table>
<TableHeader>
<TableRow>
<TableHeaderColumn>First Name</TableHeaderColumn>
<TableHeaderColumn>Last Name</TableHeaderColumn>
<TableHeaderColumn>Type</TableHeaderColumn>
<TableHeaderColumn>Email</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody>
{this.state.genData.map((row, i) => (
<TableRow key={i}>
<TableRowColumn>{row.firstName}</TableRowColumn>
<TableRowColumn>{row.lastName}</TableRowColumn>
<TableRowColumn>{row.type}</TableRowColumn>
<TableRowColumn>{row.email}</TableRowColumn>
</TableRow>
))}
</TableBody>
</Table>
</div>
);
}
}
我建议你待办事项的反应的例子读取任何(许多) ,因为他们都有你感兴趣的功能。 –