什么时候不使用 Formik 的 FastField?
When NOT to use Formik's FastField?
在 Formik 的文档中 FastField 它有很多你应该在什么时候使用它以及它是如何工作的,但是有没有你不应该使用的情况?
因为如果在某些情况下 FastField
更快而在其他情况下它没有任何区别,为什么不总是使用 FastField
?是否存在使用 Field
比 FastField
更好的情况?
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;
}
}
在 Formik 的文档中 FastField 它有很多你应该在什么时候使用它以及它是如何工作的,但是有没有你不应该使用的情况?
因为如果在某些情况下 FastField
更快而在其他情况下它没有任何区别,为什么不总是使用 FastField
?是否存在使用 Field
比 FastField
更好的情况?
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;
}
}