我尝试创建一个能够创建或编辑数据库中现有项目的React组件。一切都运行正常,除了一件事:当我从new
路线(具有不同行为的相同组件)呼叫路线edit
时,React只保留以前的状态,我无法做到查看包含空数据的新表单。它仅在我从其他地方调用new
路径时才有效。
可能的路线:
/bastions/new
- 呈现没有数据的组件
/bastions/:id
- 使用现有数据呈现组件
这个问题对某人来说是否熟悉?
只是为了使事情更清洁(最相关的和平),只需要一些代码:
提前致谢。
class BastionForm extends Component {
componentWillMount() {
if(this.props.bastion.number) {
this.props.fetchBastion(this.props.params.number);
}
}
renderField({ input, label, type, meta: { touched, error, warning } }) {
return (
<FormGroup controlId={label} {...validation}>
<ControlLabel>{label}</ControlLabel>
<FormControl {...input} placeholder={label} type={type} />
<FormControl.Feedback />
</FormGroup>
);
}
render() {
const { handleSubmit, pristine, reset, submitting } = this.props;
return (
<form onSubmit={handleSubmit(this.onSubmit.bind(this)) }>
<h3>Create a new Bastion</h3>
<Field name="sample" type="text" component={this.renderField} />
<ButtonToolbar>
<Button bsStyle="primary" disabled={submitting}>Submit</Button>
</ButtonToolbar>
</form>
);
}
}
BastionForm = reduxForm({
form: 'BastionForm',
enableReinitialize: true
})(BastionForm);
BastionForm = connect(
state => ({
initialValues: state.bastions.bastion
}), { fetchBastion }
)(BastionForm);
export default BastionForm;
答案 0 :(得分:2)
import { URLSearchParams } from '@angular/http';
const params = new URLSearchParams();
params.set('userName', userName);
params.set('password', password);
this.http.post(url, params)
仅在安装发生前调用一次。由于componentWillMount
和/bastions/new
实际上是指相同的路线,因此当您的路径从/bastions/:id
更改为BastionForm
时,系统不会卸载/bastions/:id
。因此,您可以通过更改/bastions/new
的状态(发送操作)来决定是显示现有数据还是显示无数据。然后在BastionForm
中处理道具更改。