【问题标题】:How to create a questionnaire type form using Ant Design?如何使用 Ant Design 创建问卷类型的表单?
【发布时间】:2019-01-17 19:49:01
【问题描述】:

Ant Design 提供了一个Dynamic Form Item,通过它,我可以添加和删除多个字段。但现在我想在其中进行嵌套,即,我想创建一个类似表单的问卷,我想在其中添加多个问题及其各自的答案。

目前,当我添加问题时,它的工作正常,但是当我添加一个问题的答案时,它也会添加到所有问题中。

添加和删除问题和答案的功能如下:

remove = k => {
    const { form } = this.props;
    // can use data-binding to get
    const keys = form.getFieldValue("keys");
    // We need at least one passenger
    if (keys.length === 1) {
      return;
    }

    // can use data-binding to set
    form.setFieldsValue({
      keys: keys.filter(key => key !== k)
    });
  };

  add = () => {
    const { form } = this.props;
    // can use data-binding to get
    const keys = form.getFieldValue("keys");
    const nextKeys = keys.concat(uuid);
    uuid++;
    // can use data-binding to set
    // important! notify form to detect changes
    form.setFieldsValue({
      keys: nextKeys
    });
  };

  remove1 = k1 => {
    const { form } = this.props;
    // can use data-binding to get
    const keys1 = form.getFieldValue("keys1");
    // We need at least one passenger
    if (keys1.length === 1) {
      return;
    }

    // can use data-binding to set
    form.setFieldsValue({
      keys: keys1.filter(key1 => key1 !== k1)
    });
  };

  add1 = () => {
    const { form } = this.props;
    // can use data-binding to get
    const keys1 = form.getFieldValue("keys1");
    const nextKeys1 = keys1.concat(uuid1);
    uuid1++;
    // can use data-binding to set
    // important! notify form to detect changes
    form.setFieldsValue({
      keys1: nextKeys1
    });
  };

我有created a demo on codesandbox.io

【问题讨论】:

    标签: reactjs antd


    【解决方案1】:

    问题不在于函数,而在于 getFieldDecorator:

    <FormItem>
         {getFieldDecorator(`answer[${k}]`, {
             validate: [
             ...
             ]
             })(<Input type="" placeholder=" Enter Answer" />)
    

    您为所有输入提交相同的输入值。

    没有装饰器,它可以正常工作,您可以对自定义函数进行验证并调用它

     <FormItem>
         <Input 
             type="" 
             placeholder=" Enter Answer" 
             // value={this.state.answer}
             // onChange={e => this.handleChange(e)} 
          />
     </FormItem>
    

    UPD:添加了完整代码 - Sandbox try

    【讨论】:

    • 添加沙盒
    • 还是不行。当我在一个问题中添加一个答案时,它也会更新到其他问题。
    • Hm ,可能您使用的是相同的状态字符串变量。尝试使用数组并解析它。
    • 我已经修复了添加问题,但现在我正在努力删除。 codesandbox.io/s/o774v6q845
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2019-01-27
    相关资源
    最近更新 更多