首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ant Design创建调查问卷类型表单?

如何使用Ant Design创建调查问卷类型表单?
EN

Stack Overflow用户
提问于 2018-08-10 16:38:47
回答 1查看 1.9K关注 0票数 3

Ant Design提供了一个Dynamic Form Item,通过使用它,我可以添加和删除多个字段。但现在我想做嵌套,也就是说,我想创建一个类似于form的调查问卷,我想在其中添加多个问题及其各自的答案。

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

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2018-08-10 21:20:59

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

代码语言:javascript
复制
<FormItem>
     {getFieldDecorator(`answer[${k}]`, {
         validate: [
         ...
         ]
         })(<Input type="" placeholder=" Enter Answer" />)

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

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

代码语言:javascript
复制
 <FormItem>
     <Input 
         type="" 
         placeholder=" Enter Answer" 
         // value={this.state.answer}
         // onChange={e => this.handleChange(e)} 
      />
 </FormItem>

更新:添加完整代码- Sandbox try

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51782379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档