Я пытаюсь создать повторно используемый компонент для создания простых форм, имеющих проверку и обработку действий отправки. Я могу использовать его сам, но когда я пытаюсь сделать функциональный компонент для инъекции реквизита, я застрял в этой ошибке.Попытка повторного использования редукционной формы с функциональным компонентом
Этот класс использует компонент для создания форм
import React from 'react';
import CustomReduxForm from './CustomReduxForm';
class LoginForm extends React.Component {
getFields() {
return [
{
name : 'username',
type : 'text',
label : 'User',
mandatory : true
},
{
name : 'password',
type : 'password',
label : 'Password',
mandatory : true
}
];
}
handleFormSubmit(values) {
console.log(values)
}
render() {
return (
<div>
<div>Test</div>
<CustomReduxForm
formName="LoginForm"
fields={this.getFields()}
onSubmit={this.handleFormSubmit}
/>
</div>
);
}
}
export default LoginForm;
Это компонент для построения форм
import React from 'react';
import { reduxForm, Field } from 'redux-form';
function CustomReduxForm(props) {
class CustomForm extends React.Component {
render() {
const { handleSubmit } = this.props;
return (
<div style={{ margin: '30px' }}>
<form onSubmit={handleSubmit(props.onSubmit)}>
{fields.map(myField => renderFieldset(myField))}
<button className="btn btn-primary" type="submit">Submit</button>
</form>
</div>
);
}
}
const renderInput = field => {
return (
<div className={`form-group ${field.meta.touched && field.meta.invalid ? 'has-danger' : ''}`}>
<input
{...field.input}
type={field.type}
className="form-control"
/>
{field.meta.touched && field.meta.error && <div className="text-help">{field.meta.error}</div>}
</div>
);
}
const renderFieldset = customField => {
return (
<div>
<label htmlFor={customField.name}>{customField.label}</label>
<Field
name={customField.name}
component={renderInput}
type={customField.type} />
</div>
);
}
const validate = values => {
const errors = {}
props.fields.forEach((customField) =>
{
if(customField.mandatory && ! values[customField.name]) {
errors[customField.name] = `You must enter a valid value for ${customField.label}!`;
}
});
return errors
}
return reduxForm({
form: props.formName,
validate
})(CustomForm);
};
export default CustomReduxForm;
Я уже пробовал различные способы экспорта созданной формы в CustomReduxForm, но все равно ничего!
return reduxForm({
form: props.formName,
validate
})(CustomForm);
// or
const FormWrapped = reduxForm({
form: props.formName,
validate
})(CustomForm);
// Non sense, but ..
return FormWrapped;
// or
return <FormWrapped />;
Спасибо!
Ваша последняя идея возврата ' ' должна быть достаточной. Есть ли у вас какие-либо ошибки в этой идее? Если да, то каковы они? Кроме того, не могли бы вы создать JSFiddle/JSBin/Webpackbin, который воспроизводит вашу проблему? –
gustavohenke
Спасибо за ответ, теперь я получаю это, чтобы работать, я следил за советом jpdelatorre. Похоже, было больше недостающих частей. Еще раз спасибо! –