标题重写为:"react-hook-form中的Hook调用无效"
P粉752479467
P粉752479467 2023-08-31 11:51:28
[React讨论组]
<p>我对react hook form还不熟悉,所以可能是一个简单的问题。我刚刚发现Controller无法将value作为数字使用。这让我很烦恼,但最终我在github的问题#8068中找到了解决方案,描述如下:设置一个onChange函数,像这样:</p> <pre class="brush:php;toolbar:false;">&lt;Controller - rules={{ valueAsNumber: true }} render={({ field }) =&gt; ( &lt;input - onChange={field.onChange} + onChange={(event) =&gt; field.onChange(+event.target.value)} type=&quot;number&quot; /&gt; )} /&gt;</pre> <p>所以我稍微修改了一下,得到了以下代码:</p> <pre class="brush:php;toolbar:false;">import React, { ChangeEvent } from 'react' import { Controller } from 'react-hook-form' import { getPlaceholder } from './getPlaceholder' import { IInput } from './types' const NumberInput: React.FC&lt;IInput&gt; = ({ control, name, ...props }) =&gt; { const placeholder = getPlaceholder({ type: &quot;number&quot; }); const numericalOnChange = (event: ChangeEvent&lt;HTMLInputElement&gt;) =&gt; { if (event.target.value === '') return null; return +event.target.value; } return ( &lt;Controller control={control} name={name} render={({ field: { onChange, ...field } }) =&gt; ( &lt;input {...props} {...field} type=&quot;number&quot; placeholder={placeholder} onChange={(event) =&gt; { const value = numericalOnChange(event) onChange(value) }} className=&quot;h-[20px] pl-[4px] py-[8px] bg-transparent border-b border-b-[#646464] focus:border-b-[#3898EC] text-[13px] text-[#F00] placeholder-[#646464] outline-none m-1 w-full&quot; /&gt; )} /&gt; ) } export default NumberInput</pre> <p>理论上应该可以工作,但实际上会提供一个Invalid Hook Call Error。</p>
P粉752479467
P粉752479467

全部回复(1)
P粉567112391

NumberInput 组件单独定义,然后在表单内直接使用 Controller 包装:

// NumberInput.js
export const NumberInput = ({ value, onChange, ...rest }) => {
  const handleChange = (e) => {
    onChange(Number(e.target.value));
  };
 
  return (
    <input
      type="number"
      min={0}
      onChange={handleChange}
      value={value}
      {...rest}
    />
  );
};

然后在调用 useForm 的组件内:

<Controller
  name='number'
  control={control}
  render={({ field: { ref, ...field } }) => (
    <NumberInput {...field} type="number" />
  )}
/>

你可以在 这篇文章 中找到更多信息。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号