类型“输入”上不存在属性“模糊”

问题描述

我正在使用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