React: 警告を受け取らずに子 FormItem コンポーネントを使用する方法:validateDOMNesting: Ask Questionの子孫として出現することはできません

React: 警告を受け取らずに子 FormItem コンポーネントを使用する方法:validateDOMNesting: Ask Questionの子孫として出現することはできません

親コンポーネントが指定されているので、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>
    );
  }
}

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>
    );
  }
}

ベストアンサー1

使用中にこの問題に直面しましたant design tableが、警告が表示されるのはデザインの問題ではなく、Web標準の問題であることがわかりました。説明

"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."

したがって、フォーム タグ内にフォーム タグがあってはなりません。

この問題を解決するには(私たちの場合)、 "return"Form内のタグを削除し、タグDynamicFieldSetに置き換えます。div

それが役に立てば幸い :)

おすすめ記事