Я использую redux-form
для своих форм. Я использую концепцию мастера. Мое создание и редактирование имеют одинаковую форму, поэтому я использовал initialValues, чтобы он заполнял форму, если она редактируется. Он заполняет форму, но когда я изменяю значение и go на следующий шаг и возвращаюсь к тому же шагу, то значение не изменяется.
Для обхода проблемы здесь есть ссылка для кода и поля
https://codesandbox.io/s/redux-form-wizard-example-7xv3k
Вот код
class WizardForm extends Component {
constructor(props) {
super(props);
this.nextPage = this.nextPage.bind(this);
this.previousPage = this.previousPage.bind(this);
this.state = {
page: 1,
};
}
nextPage() {
this.setState({ page: this.state.page + 1 });
}
previousPage() {
this.setState({ page: this.state.page - 1 });
}
render() {
const { onSubmit } = this.props;
const { page } = this.state;
return (
<div>
{page === 1 && <WizardFormFirstPage onSubmit={this.nextPage} />}
{page === 2 &&
<WizardFormSecondPage
previousPage={this.previousPage}
onSubmit={this.nextPage}
/>}
{page === 3 &&
<WizardFormThirdPage
previousPage={this.previousPage}
onSubmit={onSubmit}
/>}
</div>
);
}
}
WizardForm.propTypes = {
onSubmit: PropTypes.func.isRequired,
};
export default WizardForm;
const WizardFormFirstPage = props => {
const { handleSubmit } = props;
return (
<form onSubmit={handleSubmit}>
<Field
name="firstName"
type="text"
component={renderField}
label="First Name"
/>
<Field
name="lastName"
type="text"
component={renderField}
label="Last Name"
/>
<div>
<button type="submit" className="next">
Next
</button>
</div>
</form>
);
};
export default compose(
connect((state, props) => {
return {
initialValues: {
firstName: "Ram",
lastName: "Bharat"
}
};
}),
reduxForm({
form: "wizard", // <------ same form name
destroyOnUnmount: false, // <------ preserve form data
forceUnregisterOnUnmount: true, // <------ unregister fields on unmount
validate,
enableReinitialize: true
})
)(WizardFormFirstPage);
const WizardFormSecondPage = props => {
const { handleSubmit, previousPage } = props;
return (
<form onSubmit={handleSubmit}>
<Field name="email" type="email" component={renderField} label="Email" />
<div>
<label>Sex</label>
<div>
<label>
<Field name="sex" component="input" type="radio" value="male" />{" "}
Male
</label>
<label>
<Field name="sex" component="input" type="radio" value="female" />{" "}
Female
</label>
<Field name="sex" component={renderError} />
</div>
</div>
<div>
<button type="button" className="previous" onClick={previousPage}>
Previous
</button>
<button type="submit" className="next">
Next
</button>
</div>
</form>
);
};
export default compose(
connect((state, props) => {
return {
initialValues: {
email: "Ram@gmail.com",
sex: "female"
}
};
}),
reduxForm({
form: "wizard", // <------ same form name
destroyOnUnmount: false, // <------ preserve form data
forceUnregisterOnUnmount: true, // <------ unregister fields on unmount
validate,
enableReinitialize: true
})
)(WizardFormSecondPage);
Я использовал destroyOnUnmount как false, но все еще не работает. В чем может быть проблема для этого?