当验证函数在 React FC 之外时,React Final Form 验证不起作用
React Final Form validate is not working when the validate function is outside of the react FC
我有一个表单组件,我在其中为其提供了一个验证函数。当我在 FC 内部定义验证函数时,它起作用了。但是当我在 FC 之外提取那个函数时,它不会被调用。
这个有效:
import { FC } from 'react';
import { Form } from 'react-final-form';
const MyComponent: FC = () => {
const validate = (values: ValidationValues) => { ... }
return (
<Form
onSubmit={onSubmit}
validate={validate}
>
...
</Form>
);
}
这将不起作用:(不会调用验证函数)
import { FC } from 'react';
import { Form } from 'react-final-form';
const validate = (values: ValidationValues) => { ... }
const MyComponent: FC = () => {
return (
<Form
onSubmit={onSubmit}
validate={validate}
>
...
</Form>
);
}
解决问题的方法是这样的,但我不明白这种行为的原因是什么:
import { FC } from 'react';
import { Form } from 'react-final-form';
const validate = (values: ValidationValues) => { ... }
const MyComponent: FC = () => {
return (
<Form
onSubmit={onSubmit}
validate={(values: ValidationValues) => validate(values)}
>
...
</Form>
);
}
关于我使用的软件包版本的一些信息:
react-final-form: 6.3.0
react: 16.8.6
问题在于,当我们传递定义在 React 组件内部的验证函数时,每当重新渲染组件时,都会再次创建验证函数。
所以在我们提取验证的情况下,它不会再次重新创建,因此创建后不会再次运行。
我有一个表单组件,我在其中为其提供了一个验证函数。当我在 FC 内部定义验证函数时,它起作用了。但是当我在 FC 之外提取那个函数时,它不会被调用。
这个有效:
import { FC } from 'react';
import { Form } from 'react-final-form';
const MyComponent: FC = () => {
const validate = (values: ValidationValues) => { ... }
return (
<Form
onSubmit={onSubmit}
validate={validate}
>
...
</Form>
);
}
这将不起作用:(不会调用验证函数)
import { FC } from 'react';
import { Form } from 'react-final-form';
const validate = (values: ValidationValues) => { ... }
const MyComponent: FC = () => {
return (
<Form
onSubmit={onSubmit}
validate={validate}
>
...
</Form>
);
}
解决问题的方法是这样的,但我不明白这种行为的原因是什么:
import { FC } from 'react';
import { Form } from 'react-final-form';
const validate = (values: ValidationValues) => { ... }
const MyComponent: FC = () => {
return (
<Form
onSubmit={onSubmit}
validate={(values: ValidationValues) => validate(values)}
>
...
</Form>
);
}
关于我使用的软件包版本的一些信息:
react-final-form: 6.3.0
react: 16.8.6
问题在于,当我们传递定义在 React 组件内部的验证函数时,每当重新渲染组件时,都会再次创建验证函数。
所以在我们提取验证的情况下,它不会再次重新创建,因此创建后不会再次运行。