什么时候不使用 Formik 的 FastField?

When NOT to use Formik's FastField?

在 Formik 的文档中 FastField 它有很多你应该在什么时候使用它以及它是如何工作的,但是有没有你不应该使用的情况?

因为如果在某些情况下 FastField 更快而在其他情况下它没有任何区别,为什么不总是使用 FastField?是否存在使用 FieldFastField 更好的情况?

FastField 有一个 shouldComponentUpdate,它 'concerned' 仅关于更改它自己的道具。

如果您的用例由于任何其他更改而需要重新呈现字段,那么请不要选择 FastField。 即使其他一些道具发生变化,您的组件也不会更新。

此外,根据文档,由于 Formik Field 的重新渲染导致的性能问题可能仅在表单很大(>30 个字段)的情况下才会出现。他们建议仅对 >30 个字段使用 FastFields。

shouldComponentUpdate(props: FastFieldInnerProps<Values, Props>) {
    if (this.props.shouldUpdate) {
      return this.props.shouldUpdate(props, this.props);
    } else if (
      props.name !== this.props.name ||
      getIn(props.formik.values, this.props.name) !==
        getIn(this.props.formik.values, this.props.name) ||
      getIn(props.formik.errors, this.props.name) !==
        getIn(this.props.formik.errors, this.props.name) ||
      getIn(props.formik.touched, this.props.name) !==
        getIn(this.props.formik.touched, this.props.name) ||
      Object.keys(this.props).length !== Object.keys(props).length ||
      props.formik.isSubmitting !== this.props.formik.isSubmitting
    ) {
      return true;
    } else {
      return false;
    }
  }