在Formik的FastField文档中,有很多您应该何时使用它以及它如何工作的信息,但是在某些情况下您不应该使用它?
因为如果在某些情况下FastField
更快,而在其他情况下却没有任何区别,那么为什么不总是使用FastField
呢?是否存在使用Field
比FastField
更好的情况?
最佳答案
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;
}
}