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