標題重寫為:"react-hook-form中的Hook呼叫無效"
<p>我對react hook form還不熟悉,所以可能是個簡單的問題。我剛剛發現Controller無法將value作為數字使用。這讓我很煩惱,但最終我在github的問題#8068中找到了解決方案,描述如下:設定一個onChange函數,像這樣:</p>
<pre class="brush:php;toolbar:false;"><Controller
- rules={{ valueAsNumber: true }}
render={({ field }) => (
<input
- onChange={field.onChange}
onChange={(event) => field.onChange( event.target.value)}
type="number"
/>
)}
/></pre>
<p>所以我稍微修改了一下,得到了以下程式碼:</p>
<pre class="brush:php;toolbar:false;">import React, { ChangeEvent } 從 'react'
import { Controller } from 'react-hook-form'
import { getPlaceholder } 從 './getPlaceholder'
import { IInput } from './types'
const NumberInput: React.FC<IInput> = ({ control, name, ...props }) => {
const placeholder = getPlaceholder({ type: "number" });
const numericalOnChange = (event: ChangeEvent<HTMLInputElement>) => {
if (event.target.value === '') return null;
return event.target.value;
}
return (
<Controller
control={control}
name={name}
render={({ field: { onChange, ...field } }) => (
<input
{...props}
{...field}
type="number"
placeholder={placeholder}
onChange={(event) => {
const value = numericalOnChange(event)
onChange(value)
}}
className="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"
/>
)}
/>
)
}
export default NumberInput</pre>
<p>理論上應該可以工作,但實際上會提供一個Invalid Hook Call Error。 </p>