Когда НЕ использовать FastField от Formik? - PullRequest
2 голосов
/ 21 января 2020

В документах Formik's FastField есть много случаев, когда вы должны его использовать и как это работает, но есть ли случаи, когда вы не должны использовать?

Потому что если в В некоторых случаях FastField быстрее, а в других случаях это не имеет значения, почему бы не всегда использовать FastField? Есть ли случай, когда использование Field лучше, чем FastField?

1 Ответ

2 голосов
/ 23 января 2020

FastField имеет shouldComponentUpdate, который «обеспокоен» изменениями только своих собственных реквизитов.

Если в вашем сценарии использования требуется повторное рендеринг поля из-за каких-либо других изменений, не используйте go для FastField. Даже если какое-либо другое изменение реквизита, ваш компонент не будет обновлен.

Кроме того, в соответствии с документами, проблемы с производительностью из-за повторного рендеринга Formik Field могут возникать только в тех случаях, когда форма огромна (> 30 полей). Они рекомендуют использовать 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;
    }
  }
...