在Formik的FastField文档中,有很多您应该何时使用它以及它如何工作的信息,但是在某些情况下您不应该使用它?

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

最佳答案

FastField有一个shouldComponentUpdate,它仅对自己的 Prop 进行“关注”。

如果您的用例由于任何其他更改而要求字段重新呈现,则不要使用FastField。 即使更改了其他一些 Prop ,您的组件也不会被更新。

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

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;
    }
  }

09-17 10:03