【问题标题】:Formik - Update initial values after API callFormik - API 调用后更新初始值
【发布时间】:2020-01-31 23:53:39
【问题描述】:

我根据选择输入的变化从 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

表单提交正常。

【问题讨论】:

    标签: reactjs redux axios formik dynamicform


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我一直在寻找这个答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我同意。如果表单不是动态的,则根本不需要。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2020-11-09
      • 2021-05-28
      相关资源
      最近更新 更多