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

使用Formik FieldArray时无法修改Material-UI TextField的值如何解决

问题根因

TextField的value属性被硬编码为固定值Group ${index+1},没有绑定Formik维护的表单状态。即便setFieldValue成功更新了Formik内部状态,输入框的展示值始终会被硬编码的固定值覆盖,因此表现为无法修改的只读状态。
默认值不应该直接写死在输入框的value属性上,需要统一在Formik的初始值配置中声明。

修正方案

步骤1:配置初始值

在Formik的initialValues中提前配置数组项的默认值,动态新增FieldArray项时也在新增逻辑中指定初始值:

// Formik根组件配置示例
<Formik
  initialValues={{
    myGroups: [
      { myGroupName: "Group 1" },
      { myGroupName: "Group 2" }
    ]
  }}
  {/* 其余Formik配置 */}
>
  {({ values, setFieldValue }) => (
    {/* 你的组件代码,FieldArray逻辑写在这里 */}
  )}
</Formik>

// 动态新增FieldArray项时的示例
arrayHelpers.push({ myGroupName: `Group ${values.myGroups.length + 1}` })

步骤2:修改TextField属性

将TextField的value绑定到Formik维护的values对应字段:

<TextField
  name={`myGroups.${index}.myGroupName`}
  value={values.myGroups[index].myGroupName}
  label="Group"
  InputProps={{ style: { backgroundColor: "white" }}}
  autoComplete="off"
  onChange={(e) => setFieldValue(`myGroups.${index}.myGroupName`, e.target.value)}
/>

如果是配合Formik的Field组件使用,只需要传name属性即可自动同步value和onChange,不需要手动绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:42:00