可能我已经检查了所有关于这个问题的文档和问题,但我仍然无法解决它很长时间。所以,我决定在这里问一下。
正如标题所说我试图从其父组件提交一个redux表单。我尝试将隐藏的提交输入添加到表单中,虽然这不是redux表单方式,但它仍然有效。我该怎么办?
感谢您的帮助。
WorkExperienceForm.js
import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
import { renderHorizontalTextField } from '../Fields/TextFields';
import { renderTextAreaFieldWithLabelAndPopover } from '../Fields/TextAreaFields';
const WorkExperienceForm = ({ handleSubmit, onSubmit, shouldHide, form }) => {
if(shouldHide) return false;
return(
<form onSubmit={ handleSubmit(onSubmit) } className="form-horizontal">
<Field name="companyName"
type="text"
label="Company Name"
placeholder="Apple inc."
id="input-company-name"
component={renderHorizontalTextField} />
<Field name="title"
type="text"
label="Title"
placeholder="Marketing Specialist"
id="input-title"
component={renderHorizontalTextField} />
<Field name="startYear"
type="text"
label="Start Year"
placeholder=""
id="input-start-year"
component={renderHorizontalTextField} />
<Field name="endYear"
type="text"
label="End Year"
placeholder="Blank if current"
id="input-end-year"
component={renderHorizontalTextField} />
<Field name="summary"
rows="4"
label="Summary"
placeholder="Summary..."
id="input-summary"
component={renderTextAreaFieldWithLabelAndPopover} />
</form>
)
}
export default reduxForm({
enableReinitialize: true
})(WorkExperienceForm);
这是父组件
onSubmit(values){
this.props.createWorkExperience(values, () => {
this.props.notify();
})
}
render(){
if(!this.props.candidate || !this.props.candidate['workExperience'].length > 0) return this.renderEmptyState();
const activeClass = this.state.displayForm ? 'btn btn-success btn-block mt8' : 'btn btn-primary btn-block mt8'
return(
<div>
{ this.renderWorkExperience() }
<WorkExperienceForm {...this.props}
form='postWorkExperienceForm'
onSubmit={this.onSubmit}
shouldHide={!this.state.displayForm} />
<button type={ this.state.displayForm ? 'submit' : 'button' }
htmlFor='postWorkExperienceForm'
className={activeClass} >{ this.state.displayForm ? 'Save' : 'Add Work Experience' }
</button>
</div>
)
}
答案 0 :(得分:1)
是的,关于此事的文件很少。
我认为您可能遇到Context
个问题。我认为您应该将按钮移动到表单组件并将mySubmit
(为了清晰起见,将其从onSubmit
重命名)函数传递给带有箭头功能的表单组件onSubmit
属性。
mySubmit(formValues){
this.props.createWorkExperience(formValues, () => {
this.props.notify();
})
}
<WorkExperienceForm {...this.props}
form='postWorkExperienceForm'
onSubmit={(formValues) => this.mySubmit(formValues)}
shouldHide={!this.state.displayForm} />
然后在表单组件中将onSubmit
包裹在handleSubmit
函数中。
<form onSubmit={handleSubmit(onSubmit)}>
以下是我们最近必须使用Redux-Form
执行此操作的示例。
也许,它会帮助你一些。
注意,我们正在使用
FLOW
。
父组件:beer.add.component.js
表单组件:beer.add.form.component.js
Live production示例,所以你知道它有效。
注意,SignInForm使用相同的模式。