首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react钩子-表单7,带有自定义输入,空值

react钩子-表单7,带有自定义输入,空值
EN

Stack Overflow用户
提问于 2022-11-25 19:05:42
回答 1查看 65关注 0票数 2

我有以下自定义输入组件:

代码语言:javascript
复制
export type InputProps = {
  error?: string
} & InputHTMLAttributes<HTMLInputElement>

export const Input: FunctionComponent<InputProps> = ({ error, ...props }) => (
  <input {...props} />
)

用法

代码语言:javascript
复制
<form onSubmit={handleSubmit(onSubmit)}>
  <Input placeholder="https://example.com" error={errors.url?.message} {...register('url')} />
  <input type="submit" />
</form>

当我尝试使用它时,我会收到一个验证错误,因为URL是空的(空字符串),我试着调试,函数寄存器只返回{name: "url"},这在我看来是可疑的。

我做错了什么?

编辑

我在控制台上看到这个

代码语言:javascript
复制
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

Check the render method of `Home`.
    at Input (webpack-internal:///./components/input.tsx:10:11)
    at form
    at div
    at div
    at Home (webpack-internal:///./pages/index.tsx:17:90)
    at App (webpack-internal:///./pages/_app.tsx:11:11)
    at Hydrate (webpack-internal:///./node_modules/@tanstack/react-query/build/lib/Hydrate.mjs:30:3)
    at QueryClientProvider (webpack-internal:///./node_modules/@tanstack/react-query/build/lib/QueryClientProvider.mjs:47:3)
    at TRPCProvider (webpack-internal:///./node_modules/@trpc/react-query/dist/createHooksInternal-2bef4843.mjs:158:17)
    at WithTRPC (webpack-internal:///./node_modules/@trpc/next/dist/index.mjs:44:83)
    at PathnameContextProviderAdapter (webpack-internal:///./node_modules/next/dist/shared/lib/router/adapters.js:62:11)
    at ErrorBoundary (webpack-internal:///./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js:2:3325)
    at ReactDevOverlay (webpack-internal:///./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js:2:6707)
    at Container (webpack-internal:///./node_modules/next/dist/client/index.js:60:1)
    at AppContainer (webpack-internal:///./node_modules/next/dist/client/index.js:173:11)
    at Root (webpack-internal:///./node_modules/next/dist/client/index.js:346:11)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 21:32:43

该错误告诉您正在尝试通过使用useRef来引用功能组件本身。

为了给功能组件提供参考,它应该通过forwardRef来实现。

除了无法看到在您的端端作为代码实现了什么之外,错误还告诉您要查看‘Home’组件的呈现函数,因为您使用了对您在下共享的输入组件的引用。

如果您提供的话,我可以添加如何包装您的组件或对沙箱进行编辑,但是,更有可能的是,您可能会出现错误,没有遵循命名约定来作出反应。如在反应文件中所述;

始终以大写字母开头组件名称。

**这意味着按照组件名称输入,您应该将文件命名为Input.tsx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74577022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档