Formik - "dirty" 应用于具有相同自定义组件的所有实例

Formik - "dirty" gets applied to all instances with the same custom component

当前行为

当我创建自定义输入组件并尝试根据输入是否为 "dirty" 添加 class 名称时,class 会应用于所有输入使用这个组件。

这是我创建的一个简单示例... https://codesandbox.io/s/hello-world-h60hj

您会注意到两个输入都使用相同的自定义组件 "InputComponent",并且当您开始输入其中任何一个时,class 将应用于两个输入。

我认为 "isValid" 也有同样的表现。

预期行为

class 应该只应用于我在里面输入的脏输入。

我是不是做错了什么?

您可以通过更新 InputComponent.js.

来实现您的输出
<div>
  <input
    type="text"
    {...field}
    {...props}
    className={
      !isValid && touched[field.name] && errors[field.name] ? "error" : ""
    }
  />
  {!isValid && touched[field.name] && errors[field.name] && (
    <div className="error">{errors[field.name]}</div>
  )}
</div>

https://jaredpalmer.com/formik/docs/api/formik#dirty-boolean

Returns true if values are not deeply equal from initial values, false otherwise. dirty is a readonly computed property and should not be mutated directly.

我已经在此处更新了您的代码
https://codesandbox.io/s/hello-world-w7zwt

希望这对你有用!