【问题标题】:How to recreate form with dynamic fields for edit in react antd (rc-forms)如何使用动态字段重新创建表单以在 React antd(rc-forms)中进行编辑
【发布时间】:2020-06-02 14:50:52
【问题描述】:

使用 antd 表单组件(依赖于rc-form)创建表单后,我还需要使用编辑表单,我找不到任何有关如何使用我的表单值初始化 antd 表单的资源有(尤其是动态字段)

我发现使用form.setFieldsInitialValue(theEditValues); 会正确初始化一些带有数据的表单字段(例如,带有多选的下拉菜单),但不是正常的下拉菜单&最重要的是,所有的未创建动态字段,提示您在创建字段之前无法设置字段数据

那么有没有一种首选的方式来处理编辑场景?这样:

1-根据之前提交的数据重新创建动态字段

2- 将整个表单与提交的数据同步

我添加了a sandbox to show what I mean,主要是如果我有表单值并且我想用给定值的动态字段初始化表单

注意:

我们需要处理用户输入任意数量的动态字段并且我们想要使用具有给定信息的编辑表单页面的一般情况

更新:

我更新了示例in a new sandbox 以显示动态处理值的含义,我不知道编辑场景中的动态输入,它可以是一个字段或很多字段,因此在从api,它应该使用form.setFieldsValue 以编程方式注入到表单中(就像它可以如何处理静态字段一样)

【问题讨论】:

  • 那行得通吗?下面是我的解决方案?
  • @ZohaibIjaz 我已经更新了问题,抱歉没有注意到您的评论在这里,我提供了一个新的沙箱,因为您的解决了静态案例并且我不想更改初始沙盒是否对其他人有帮助。

标签: reactjs antd rc-form


【解决方案1】:

这里是更新代码https://codesandbox.io/s/cocky-sun-e57dm?fontsize=14&hidenavigation=1&theme=dark

这里有一些事情要做

  1. 您需要使用 2 初始化 id,因为您需要 2 个初始字段。
  2. 你需要用数组中的两个值来初始化keys字段值,而不是[]之类的

getFieldDecorator("keys", { initialValue: [0, 1] });
  1. 使用 this 为可用字段分配初始值

getFieldDecorator(`names[${k}]`, {
  validateTrigger: ["onChange", "onBlur"],
  initialValue: valueOfFormToEdit[k] || '',
  rules: [
    {
      required: true,
      whitespace: true,
      message: "Please input passenger's name or delete this field."
    }
  ]
})

更新

针对新的要求更新了沙盒:D

https://codesandbox.io/s/friendly-kirch-9gq1b?fontsize=14&hidenavigation=1&theme=dark

【讨论】:

  • 谢谢,但在这里您假设知道它只有 2 个字段,这只是一个示例,我想处理一个通用案例,其中用户输入了任意数量的字段,我们想给他一个编辑包含他的信息的表单页面
  • 您可以通过用户输入简单地初始化该数字的值
  • 插入全局变量,使其成为状态变量
  • 感谢 Zohaib,即使处理静态案例,您在答案中输入的演示也没有预加载任何字段,我正在尝试使其具有带有值的字段(就像编辑场景一样),所以仍然缺少一些东西..
  • 已更新。现在试试这个codesandbox.io/s/…
猜你喜欢
  • 2021-05-01
  • 2014-01-17
  • 2019-08-23
  • 2012-05-25
  • 1970-01-01
  • 2023-03-16
  • 2020-06-12
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多