變化:
商店中的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>
);
}
}
我建議你待辦事項的反應的例子讀取任何(許多) ,因爲他們都有你感興趣的功能。 –