如何使用Ant Design创建问卷类型表格?

时间:2018-08-10 08:38:47

标签: reactjs antd

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

1 个答案:

答案 0 :(得分: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