Formik - 在 API 调用后更新初始值

Formik - Update initial values after API call

我根据 select 输入的变化从 API 调用动态获取我的输入,但是当我尝试添加到 Formik 的初始值时,它总是给我一个错误...

Warning: A component is changing an uncontrolled input of type text to be controlled.

如果我将 enableReinitialize={true} 设置为 Formik 也无济于事。

但是,如果我从本地 JSON 或对象生成输入,错误就会消失。

我这里哪里做错了...

https://codesandbox.io/s/test-dynamic-inputs-with-formik-xr9qg

表单提交正常。

如果有人遇到同样的问题,我刚刚找到了解决方案...

您必须在 TextInput 组件或您使用的任何类型的输入中设置 value={field.value || ''} 才能解决此问题。

我有一个复杂的动态表单,也遇到了这个问题。对于将来调试此问题的任何人,我有一些建议:

  1. 为您的 Field 组件设置值——就像上面 Ruby 所做的那样。
  2. 确保您的 Formik 组件具有唯一标识键。
  3. 跟踪和调试您的 initialValues 并确保所有字段都被考虑在内。您不必像 Ruby 那样设置字段值——只要您的 initialValues 对象考虑了所有字段。但是,我的表单动态更改了 Field 组件——Ruby 的解决方案是唯一有效的解决方案。

如果您的表单不是动态的——我认为最好在实施 Ruby 的解决方案之前先检查您的 initialValues 对象。 Formik 应该为您处理这些值——这就是为什么它是一个如此棒的工具。

最好使用 enableReinitialize={true}。这是官方的 Formik API。 您可以查看 this issue