Я использую redux-form
для обработки данных формы внутри приставки.
Я заметил, что для использования состояния syncErrors
для проверки ошибок валидации мне нужно сначала проверить, что фактический redux-form
закончил рендеринг, в противном случае React будет жаловаться, что не может найти syncErrors
из неопределенного - это означает, что this.props.accountForm
, redux-form
, еще не доступен.
Это ожидаемое поведение?
Это код, который ломается:
render() {
return (
<SignUpInForm>
<div>
<Field
name="name"
component={renderTextField}
label="Full Name*"
/>
</div>
<div>
<Field
name="email"
component={renderTextField}
label="Email Address*"
/>
</div>
<div>
<Button
disabled={!!this.props.accountForm.syncErrors}
onClick={this.signUp}
>
Save
</Button>
</div>
..
</SignUpInForm>
)
}
И это код, который работает:
render() {
return (
!!this.props.accountForm && (
<SignUpInForm>
<div>
<Field
name="name"
component={renderTextField}
label="Full Name*"
/>
</div>
<div>
<Field
name="email"
component={renderTextField}
label="Email Address*"
/>
</div>
<div>
<Button
disabled={!!this.props.accountForm.syncErrors}
onClick={this.signUp}
>
Save
</Button>
</div>
..
</SignUpInForm>
)
)
}
Мне это кажется немного уродливым!
Примечание - вот как я подключаю его к редуктору:
const mapStateToProps = state => {
return {
accountForm: state.form.accountForm
};
};
Account = connect(
mapStateToProps,
null
)(Account);
export default withRouter(
reduxForm({
form: "accountForm",
validate
})(Account)
);
Тогда файл combReducers выглядит так:
import { combineReducers } from "redux";
import { reducer as reduxForm } from "redux-form";
export default combineReducers({
form: reduxForm
});