reactjs - Antd V4 表单列表setFieldValue

标签 reactjs antd

在此处输入代码我们如何动态编辑表单列表中的元素并使用 setFieldsValue 设置该元素

我得到的解决方案是为整个表单 List 调用 setFieldsValue 但这不公平,会导致性能问题

我有这样的表单结构

users: [
  {
    name: "bob",
    education: [
      {
        qualification: "masters",
        college: "abc",
      },
      {
        qualification: "degree",
        collge: "ijk",
      },
    ],
  },
  {
    name: "alice",
    education: [
      {
        qualification: "ug",
        college: "abc",
      },
      {
        qualification: "higher secondary",
        college: "def",
      },
    ],
  },
];

使用表单列表实现

  • 我想更新用户“alice”的“教育[1]”的“资格” 使用 antd v4 setFieldsValue
  • 我得到了一个解决方案,即使用 getFieldsValue 获取所有值,然后 更改更改“资格”,然后更新整个表单值,但是 它会导致一些大型应用程序的性能问题
  • 如何使用 setFieldsValue 更新表单中的单个字段?
  • 在 antd v3 中,它通过在 setFeildsValue 中提供路径来存档,例如

    setFieldsValue({ 'user.1.education.1.qualification':'something' })

提前感谢您宝贵的回答

最佳答案

如果你不明白@Ajish 的回答(像我一样),我会试着解释一下:

作为Antd docs说,您需要将 FieldData[] 传递给您的 form.setFields() 方法。在我的例子中,我只需要更新一个字段,并且我只使用了 FieldData 中的 namevalue 属性。因此,我的代码是这样的:

form.setFields([
  {
    name: ['products', fieldIndex, 'total-value'],
    value: totalValue,
  },
]);

Name 属性是一个 NamePath组成:

  • 'products':我的 Form.List 组件的名称;
  • fieldIndex:引用我要更新的对象的索引;
  • 'total-value':我要更新的字段。

为了进一步说明,products 具有以下格式:

products: [
  {
    quantity: 0,
    'unit-value': 0,
    'total-value': 0,
   },
 ],

关于reactjs - Antd V4 表单列表setFieldValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62393532/

相关文章:

javascript - 如何为不同的输入绑定(bind)多个 onChange 回调?

reactjs - : this. method.bind(this)有什么用

reactjs - 在 mobx 存储中更改状态时 Ant-Design Table 不呈现

javascript - React 在页面刷新时无法正确渲染

reactjs - 使用分页时如何在Antd Table中为每一行设置序号

antd - 我们如何在 antd ReactJS 的 Select 元素中手动输入值,该值不作为选项出现

reactjs - react-testing-library 测试 Ant Design modal

javascript - 在构造函数之外实例化的 ES6+ 实例属性

javascript - React 按钮单选 this.setState 不是一个函数

javascript - 将 React Context API 类转换为 Hook 的函数