You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用React-hook-form useFieldArray时,如何避免删除项触发大量重渲染?

解决react-hook-form useFieldArray删除行时全量重渲染的性能问题

场景描述

我使用react-hook-form的useForm管理表单,对应的数据结构如下:

{
  Field1: "some value",
  Field2: "some value",
  // ...其他字段
  Lines: [
    { LineId: "unique-id", /* 其他多个字段 */ },
    // ...更多行数据
  ]
}

表单支持复制行、添加空行、删除行操作,因此用useFieldArray钩子管理Lines数组。

目前循环useFieldArray返回的字段创建Line组件时,必须传递数组索引——哪怕useFieldArray自带id、底层数据也有唯一的LineId。原因是Line组件中大量使用的getValue、setValue,以及Controller组件,都需要通过FieldPath定位数组中的字段:

  • 下拉框设置同行其他字段默认值示例:
setValue(`Lines.${index}.${fieldName}`, defaultValue)
  • Controller组件的name属性示例:
<Controller
  name={`Lines.${index}.${fieldName}`}
  // 其他配置项
/>

问题

删除某一行时,所有行及字段都会触发重渲染。如果表单包含数百行,每行还有10+带验证规则的字段,性能问题会非常突出。

我知道可以通过标记行“已删除”而非从fieldArray中移除的方式规避,但认为react-hook-form应该有更原生的优化方案,想请教有没有更优的解决办法?

内容的提问来源于stack exchange,提问作者GlutVonSmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:34:52