gpt4 book ai didi

javascript - 如何在 Redux-Form 的提交事件中获取表单值?

转载 作者:行者123 更新时间:2023-11-30 09:50:24 25 4
gpt4 key购买 nike

我正在使用 Redux-Form并且我正在尝试在用户单击提交时获取表单值。

These are the outer form props .可以看到,有提交函数:

  • 提交
  • 提交成功
  • 提交失败

onSubmitSucessonSubmitFail 永远不会被调用。 onSubmit 已调用,但没有参数

我只想获取表单值,以便将它们发布到 API。

我该怎么做?

编辑(代码)

AutoFormInternal.js

class AutoFormInternal extends Component {

render() {

let {
componentFactory,
fields,
fieldMetadata,
layout,
handleSubmit,
submitting
} = this.props;

let model = this.props.values;
let fieldMetadataEvaluated = metadataEvaluator.evaluate(fieldMetadata, model, '', fields);

let groupComponent = componentFactory.buildGroupComponent({
component: layout.component,
layout: layout,
fields: fieldMetadataEvaluated,
componentFactory: componentFactory
});

return (
<div className="meta-form">
<form onSubmit={handleSubmit}>
{ groupComponent }
<ButtonToolbar>
<Button type="submit" bsStyle="primary" disabled={submitting}>Submit</Button>
<Button disabled={submitting}>Cancel</Button>
</ButtonToolbar>
</form>
</div>
)
}
}

AutoFormInternal.propTypes = {
fields: PropTypes.object.isRequired,
handleSubmit: PropTypes.func.isRequired,
resetForm: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
componentFactory: PropTypes.object.isRequired,
entity: PropTypes.object.isRequired,
layout: PropTypes.object
};

export default reduxForm({
form: 'simple'
})(AutoFormInternal);

AutoForm.js

class AutoForm extends Component {

render() {

let {entity, layout} = metadataProvider.getEntityAndLayout(this.props.schema, this.props.entityName, this.props.layoutName);
let componentFactory = this.props.componentFactory;
let fieldMetadata = metadataProvider.getFields(this.props.schema, entity, layout, f => {
f.componentFactory = componentFactory;
});
let fields = metadataProvider.getReduxFormFields(fieldMetadata);
let validate = (values) => {
return metadataValidator.validate(fieldMetadata, values);
}

return <AutoFormInternal
fields={fields}
fieldMetadata={fieldMetadata}
entity={entity}
layout={layout}
validate={validate}
componentFactory={componentFactory}
onSubmit={() => console.log('submit')}
onSubmitSuccess={() => console.log('submit success')}
onSubmitFail={() => console.log('submit fail')}
/>
}

}

AutoForm.propTypes = {
componentFactory: PropTypes.object.isRequired,
schema: PropTypes.object.isRequired,
entityName: PropTypes.string.isRequired,
layoutName: PropTypes.string.isRequired
};

export default AutoForm;

最佳答案

您应该将 onSubmit 函数引用作为参数传递给表单的 handleSubmit 方法:<form onSubmit={handleSubmit(onSubmit)}> .请注意,此处未调用 onSubmit 函数引用,您将其作为表单提交的“回调”提供。

现在当表单被提交时,它应该调用onSubmit函数,它应该有1个参数,整个表单的值作为一个对象。

class AutoFormInternal extends Component {

render() {

let {
componentFactory,
fields,
fieldMetadata,
layout,
handleSubmit,
submitting,
onSubmit // <-- You need to reference this function passed from the wrapper component in order to pass it to redux-form's provided handleSubmit function
} = this.props;

... *snip* ...

return (
<div className="meta-form">
<form onSubmit={handleSubmit(onSubmit)}> // <-- Here's where we pass onSubmit to redux-form's handleSubmit
{ groupComponent }
<ButtonToolbar>
<Button type="submit" bsStyle="primary" disabled={submitting}>Submit</Button>
<Button disabled={submitting}>Cancel</Button>
</ButtonToolbar>
</form>
</div>
)
}
}

AutoFormInternal.propTypes = {
fields: PropTypes.object.isRequired,
handleSubmit: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
resetForm: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
componentFactory: PropTypes.object.isRequired,
entity: PropTypes.object.isRequired,
layout: PropTypes.object
};

export default reduxForm({
form: 'simple'
})(AutoFormInternal);`

... *snip* ...

return <AutoFormInternal
fields={fields}
fieldMetadata={fieldMetadata}
entity={entity}
layout={layout}
validate={validate}
componentFactory={componentFactory}
onSubmit={(formValues) => console.log(formValues)} // <-- formValues should be now be populated when the form is submitted
onSubmitSuccess={() => console.log('submit success')}
onSubmitFail={() => console.log('submit fail')}
/>

关于javascript - 如何在 Redux-Form 的提交事件中获取表单值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com