The*_*mad 5 forms nested-forms reactjs
鉴于父组件,我使用的是子组件DynamicFieldSet是一个分组FormItems。但是我收到错误:
Warning: validateDOMNesting(...): <form> cannot appear as a descendant of <form>. See CreateTopic > Form > form > ... > DynamicFieldSet > Form > form.
我试图删除<Form> </Form>子组件中的标签,但这是一个编译错误。
有没有一种方法可以禁用子窗体视图的呈现?
父组件
class CreateTopic extends React.Component {
render() {
return (
<div className="create-topic-container">
<h3>Create an event</h3>
<Form onSubmit={this.handleSubmit}>
<FormItem>...</FormItem>
<FormItem>...</FormItem>
<FormItem>...</FormItem>
<FormItem
{...formItemLayout}
label="Results"
style={{ marginBottom: SPACING_FORM_ITEM }}
>
{getFieldDecorator('results', {
rules: [
{
required: true,
message: 'Results cannot be empty.',
},
],
})(<DynamicFieldSet
form={this.props.form}
/>)}
</FormItem>
</Form>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
DynamicFieldSet-子组件
export class DynamicFieldSet extends React.Component {
render() {
getFieldDecorator('keys', { initialValue: ['0', '1'] });
const keys = getFieldValue('keys');
const formItems = keys.map((k, index) => {
return (
<FormItem
{...formItemLayoutWithOutLabel}
required={false}
key={k}
>
{getFieldDecorator(`results[${k}]`, {
validateTrigger: ['onChange', 'onBlur'],
rules: [
{
required: true,
whitespace: true,
message: 'Result name cannot be empty.',
},
{
validator: this.validateLength,
},
],
})(<Input placeholder={`Result #${index + 1}`} style={{ width: '80%', marginRight: 8 }} />)}
{keys.length > 2 ? (
<Icon
className="dynamic-delete-button"
type="minus-circle-o"
disabled={keys.length === 1}
onClick={() => this.remove(k)}
/>
) : null}
</FormItem>
);
});
return (
<Form>
{formItems}
<FormItem {...formItemLayoutWithOutLabel}>
{keys.length < 10 ? (
<Button type="dashed" onClick={this.add} style={{ width: '80%' }}>
<Icon type="plus" />Add Result
</Button>
) : null}
</FormItem>
</Form>
);
}
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*ker 17
我在使用时遇到了这个问题ant design table,结果发现它不是引发警告的蚂蚁设计。这是网络标准描述
"Every form must be enclosed within a FORM element. There can be several forms in a single document, but the FORM element can't be nested."
因此,表单标签内不应有表单标签。
为了解决这个问题(在我们的例子中),删除FormDynamicFieldSet “return” 中的div标签并替换为一个标签
希望能帮助到你 :)
小智 9
您可以像这样输入表单:
import Portal from '@material-ui/core/Portal';
const FooComponent = (props) => {
const portalRef = useRef(null);
return <>
<form>
First form
<div ref={portalRef} />
</form>
<Portal container={portalRef.current}>
<form>Another form here</form>
</Portal>
</>;
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我使用了reactmaterial-uiPortal组件。但你也可以尝试使用React Portals来实现它
| 归档时间: |
|
| 查看次数: |
3270 次 |
| 最近记录: |