问题描述
我正在使用useRef
钩子将ref
属性传递到我的自定义FieldInput组件中。然后将其用于验证我的表单。
const fieldRef = useRef();
...
const handleSubmitForm = (
values: FormValues,helpers: FormikHelpers<FormValues>,) => {
....
fieldRef.current.blur();
helpers.resetForm();
};
但是,我在Object is possibly 'undefined'.
的fieldRef.current上遇到错误。为了解决这个问题,我进行了以下更改:
const fieldRef = useRef<Input>(null);
...
fieldRef.current?.blur();
但是,我仍然收到错误Property 'blur' does not exist on type 'Input'.
。在这里,Input
是从本机库导入的。因此,提交表单时会出现类型错误/警告。 An unhandled error was caught from submitForm()
如何摆脱这些错误?
完整的场景在此处复制为 codesandBox :https://snack.expo.io/@nhammad/jealous-beef-jerky-fix
解决方法
好吧,首先,在您的FieldInput
组件中,您将这些事件处理程序传递给Input
如下:<Input onCahnge={callback()}/>
,而不是这样:{{1} }。您没有传递回调,而是调用它们并将其结果作为事件处理程序传递。这会导致您的组件出现错误。
修复此问题并使类型提示起作用后,编辑器仍会发信号通知<Input onChange={()=>callback()}/>
类型blur
丢失。在查看了文档并尝试控制台记录ref元素之后,似乎实际上没有公开任何Input
方法。 blur
中的TextField
已公开,但未转发给react-native
native-base