React Hook 表单错误 - 类型“UseFormRegister”不可分配给类型“LegacyRef”|不明确的'

2024-01-11

我正在阅读一本 React 教程书。有一次,作者向我展示了如何构建一个简单的表单,效果很好。然后,他又将其升级为‘React Hook Form’。

一切都按照说明运行良好,直到最后一行,他说了以下内容。

“将 ref 属性添加到 Header 组件的 JSX 中的输入元素,并将其设置为 React Hook Form 中的注册函数:”

就在此时,我遇到了以下错误。

Type 'UseFormRegister<FormData>' is not assignable to type 'LegacyRef<HTMLInputElement> | undefined'.
  Type 'UseFormRegister<FormData>' is not assignable to type '(instance: HTMLInputElement | null) => void'.
    Types of parameters 'name' and 'instance' are incompatible.
      Type 'HTMLInputElement | null' is not assignable to type '"search"'.
        Type 'null' is not assignable to type '"search"'.  TS2322

    103 |       <form onSubmit={handleSubmit}>
    104 |         <input
  > 105 |         ref={register}
        |         ^
    106 |           name="search"
    107 |           type="text"
    108 |           placeholder="Search..."

最终代码可在此位置获取 -https://github.com/PacktPublishing/ASP.NET-Core-5-and-React-Second-Edition/blob/master/chapter-06/finish/frontend/src/Header.tsx https://github.com/PacktPublishing/ASP.NET-Core-5-and-React-Second-Edition/blob/master/chapter-06/finish/frontend/src/Header.tsx

我将我的代码进行了比较,使其相同,如下所示。

import React from 'react';
import { useSearchParams } from 'react-router-dom';
import { useForm } from 'react-hook-form';

type FormData = {
  search: string;
};

export const Header = () => {
  const { register } = useForm<FormData>();
  const [searchParams] = useSearchParams();
  const criteria = searchParams.get('criteria') || '';
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
        ref={register}
          name="search"
          type="text"
          placeholder="Search..."
          defaultValue={criteria}
        />
      </form>
    </div>
  );
};

我仍在学习 React 和 TypeScript。我知道该错误与类型不匹配有关。具体来说,“搜索”不能为空。但除此之外我不知道如何解决这个问题。

我查看了以下现有问题。他们似乎都在讨论这个问题,但没有讨论 React Hook Form。

类型“null”不可分配给类型“HTMLInputElement”ReactJs https://stackoverflow.com/questions/48488701/type-null-is-not-assignable-to-type-htmlinputelement-reactjs

'HTMLElement | 类型的参数null' 不可分配给“Element”类型的参数。类型“null”不可分配给类型“Element”.ts(2345) https://stackoverflow.com/questions/63520680/argument-of-type-htmlelement-null-is-not-assignable-to-parameter-of-type-el

useRef TypeScript - 不可分配给类型 LegacyRef https://stackoverflow.com/questions/66963289/useref-typescript-not-assignable-to-type-legacyrefhtmldivelement


这似乎是一个常见问题,并且已在链接的 github 问题部分中多次提出。没有提供完整的代码示例,所以在这里发布我自己的解决方案,以防万一,另一个读者像我一样被难住了。

  <form onSubmit={handleSubmit}>
    <input
      {...register("search")} defaultValue={criteria}
      placeholder="type here"
      type="text"
    />
  </form>

更多详情请点击此处 -https://github.com/PacktPublishing/ASP.NET-Core-5-and-React-Second-Edition/issues/11 https://github.com/PacktPublishing/ASP.NET-Core-5-and-React-Second-Edition/issues/11

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Hook 表单错误 - 类型“UseFormRegister”不可分配给类型“LegacyRef”|不明确的' 的相关文章

  • 我想在使用 Jest Snapshots 时获得图像文件名/路径

    我已经开始使用Jest https facebook github io jest 在一个新项目中有很多 我现在正在使用Snapshot https facebook github io jest docs tutorial react h
  • 如何取消 ComponentWillUnmount 中的所有请求?

    根据docs https facebook github io react docs react component html componentwillunmount ComponentWillUnmount 能够取消请求 我有一个页面发
  • 在我的反应应用程序中使用笑话,描述未定义

    我是开玩笑的新手 试图在下面的代码中找出一些基本的东西 import as actions from IncrementalSearchActions describe Incremental Search Actions gt it Sh
  • 当鼠标悬停在上面时制作一个 React Bootstrap NavDropdown 下拉菜单

    我试图让 React Bootstrap 中的下拉菜单栏在您显示选项时hover超过它 我到处查看 所有解决方案似乎都已过时并且不起作用 如果您能够解决此问题 请告诉我 这是我尝试将更改应用到的下拉菜单
  • React 中的静态方法

    我正在查看 React 文档并遇到了静态方法 我想知道它在什么样的场景下可能有用 但想不出有什么用 在 React 中构建组件时 是否存在静态方法有用的特定场景 defaultProps and propTypes是 React 组件的静态
  • RouteComponentProps 与 useHistory

    使用React功能组件和Typescript 使用useHistory钩子与RouteComponentProps react router v5 1 之间有什么区别吗 使用 RouteComponentProps 的示例 import R
  • TinyMCE 输入以相反顺序写入

    我面临这个问题 每当我输入 TinyMCE 时 我的光标会自动向左移动 最终从右向左写入文本 它只发生在我部署的应用程序中 但如果我在我的机器上本地运行代码 同样可以正常工作 发生这种情况的任何可能原因 相同的屏幕截图 https i st
  • Phonegap应用程序与reactjs [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人用reactjs 通过facebook 编写了phonegap应用程序吗 任何指向参考实现的指针将不胜感激 此外 您建议将什么数据
  • 发送404状态并重定向到react-router中的404组件

    我有一个 React router 3 0 0 设置 其中包含一个 NotFound 组件 我将其显示为后备
  • Material UI 选择覆盖主题中的位置

    我想覆盖主题中选择字段下拉列表的位置 不必在每个选择上实现它 我尝试过 createMuiTheme overrides MuiSelect select MenuProps getContentAnchorEl null anchorOr
  • 如何在 next.js 中使用 window.matchMedia 和样式组件主题?

    我有一个主题 const smartPhonePortrait 320 const theme isCompact typeof window undefined window matchMedia min width smartPhone
  • React - 基于计数的动态输入字段

    我想根据用户输入的计数创建文本字段 我查了很多相关问题 但找不到我想要的结果 例如 如果用户输入 5 作为输入 我想创建 5 个文本框来输入 5 个人的姓名和手机 我怎样才能实现这个目标 用于获取计数的 TextField
  • ReactJS 服务器端渲染与客户端渲染

    我刚刚开始研究ReactJS 发现它提供了两种渲染页面的方式 服务器端和客户端 但是 我不明白如何一起使用它 构建应用程序是两种不同的方法 还是可以一起使用 如果我们可以一起使用它 该怎么做 我们需要在服务器端和客户端复制相同的元素吗 或者
  • 从 React 项目中删除 ESLint

    我使用 ESLint 配置到我的项目中eslint init 它已配置到我的项目中 现在我想从我的项目中删除它 因为它在项目中显示了不必要的错误 如何从我的项目中删除启动的 ESLint 基本上删除就可以了 eslintrc以及项目中的任何
  • 尽管我正在更改状态,但 React ui 没有更新

    import React useState from react const App gt const anecdotes If it hurts do it more often Adding manpower to a late sof
  • React - 从 Node_Modules 导入文件

    我是 React 新手 但已经广泛使用过 React Native 基本上 我正在努力解决一些我认为非常简单和常见的事情 我想使用 NPM 包 bootstrap grid only css https www npmjs com pack
  • 使用示例响应式抽屉时,材质 UI 表没有响应

    我创建了一个 Web 应用程序 其基础来自于 Material UI 示例响应式抽屉 https material ui com demos drawers responsive drawer 我试图让表格根据屏幕宽度调整大小 但是 由于某
  • 当列表包含图像时,React Native FlatList 感觉很慢

    我为 avater 使用 64x64 图像 它的尺寸非常小 通过我的应用程序 滚动时帧率下降至 25 35 fps 如何优化 flatList 图像
  • 如何在 eclipse 中将 ReactJs 与 Spring MVC 集成

    我是新来的ReactJS 在我使用之前angularJS对于我的客户端 但现在我想将它与当前的应用程序集成SpringMVC 现在我想整合ReactJS作为客户端而不是angularJS 请帮我 如果有任何例子请帮忙 我在用eclipse
  • React-Spring useTransition 随机排列我的列表项

    我有一个使用 React Spring 过渡呈现的标签列表 这个想法是 您可以添加项目 如果超过 5 个 则会出现 显示更多 按钮 按此按钮可以切换是显示所有标签还是仅显示前五个标签 问题是当我从 显示更多 转变为 显示更少 时 我注意到

随机推荐