reduxForm:如何最好地调度一个动作?
reduxForm: how to best dispatch an action?
我正在尝试使用 redux 表单提交地址表单。这似乎是处理输入数据和验证的好方法。
我只是想知道我是否可以使语法更清晰一些,因为坦率地说,尝试同时使用 connect 会使代码在底部变得一团糟。在我的例子中,我想将地址数据发送到一个节点端点,所以我需要调用一个动作生成器来发送一个 AJAX 请求。我想知道我是否遗漏了一些明显的东西,以便更容易地在提交函数中调度一个动作。
class AddressForm extends Component {
renderContent() {
return formFields.map(({ name, label }) => (
<Field
key={name}
name={name}
label={label}
type='text'
component={FormField}
/>
)
);
};
render() {
return (
<form onSubmit={this.props.handleSubmit}>
{this.renderContent()}
<button type="submit">Next</button>
</form>
);
};
};
const validate = (values) => {
const errors = {};
errors.email = validateEmail(values.email || '');
formFields.forEach(({ name }) => {
if (!values[name]) errors[name] = 'Please provide a value';
});
return errors;
};
const myReduxForm = reduxForm({
validate,
form: 'addressForm'
})(AddressForm);
const mapDispatchToProps = (dispatch, ownProps) => ({
onSubmit: data => dispatch(submitForm(data, ownProps.history))
});
export default connect(null, mapDispatchToProps)
(withRouter(myReduxForm));
当然,您可以在组件内部使用 handleSubmit
属性而不是连接。它允许您提供带有三个参数的回调:values、dispatch 和 props。所以你可以这样做:
<form onSubmit={this.handleSubmit((values,dispatch,{submitForm})=> dispatch(submitForm(values)))} />
我正在尝试使用 redux 表单提交地址表单。这似乎是处理输入数据和验证的好方法。
我只是想知道我是否可以使语法更清晰一些,因为坦率地说,尝试同时使用 connect 会使代码在底部变得一团糟。在我的例子中,我想将地址数据发送到一个节点端点,所以我需要调用一个动作生成器来发送一个 AJAX 请求。我想知道我是否遗漏了一些明显的东西,以便更容易地在提交函数中调度一个动作。
class AddressForm extends Component {
renderContent() {
return formFields.map(({ name, label }) => (
<Field
key={name}
name={name}
label={label}
type='text'
component={FormField}
/>
)
);
};
render() {
return (
<form onSubmit={this.props.handleSubmit}>
{this.renderContent()}
<button type="submit">Next</button>
</form>
);
};
};
const validate = (values) => {
const errors = {};
errors.email = validateEmail(values.email || '');
formFields.forEach(({ name }) => {
if (!values[name]) errors[name] = 'Please provide a value';
});
return errors;
};
const myReduxForm = reduxForm({
validate,
form: 'addressForm'
})(AddressForm);
const mapDispatchToProps = (dispatch, ownProps) => ({
onSubmit: data => dispatch(submitForm(data, ownProps.history))
});
export default connect(null, mapDispatchToProps)
(withRouter(myReduxForm));
当然,您可以在组件内部使用 handleSubmit
属性而不是连接。它允许您提供带有三个参数的回调:values、dispatch 和 props。所以你可以这样做:
<form onSubmit={this.handleSubmit((values,dispatch,{submitForm})=> dispatch(submitForm(values)))} />