Titel umgeschrieben in: „Ungültiger Hook-Aufruf in React-Hook-Form'
P粉752479467
P粉752479467 2023-08-31 11:51:28
0
1
588
<p>Ich bin ein Neuling in der Reaktion auf Hook-Formen, daher könnte es eine einfache Frage sein. Ich habe gerade herausgefunden, dass der Controller den Wert nicht als Zahl verwenden kann. Das hat mich sehr geärgert, aber schließlich habe ich die Lösung im Github-Problem Nr. 8068 gefunden, das wie folgt beschrieben wird: Richten Sie eine onChange-Funktion ein, etwa so: </p> <pre class="brush:php;toolbar:false;"><Controller - Regeln={{ valueAsNumber: true }} render={({ field }) => <Eingabe - onChange={field.onChange} + onChange={(event) => field.onChange(+event.target.value)} type="Nummer" /> )} /></pre> <p>Also habe ich es ein wenig modifiziert und den folgenden Code erhalten: </p> <pre class="brush:php;toolbar:false;">import React, { ChangeEvent } from 'react' { Controller } aus 'react-hook-form' importieren importiere { getPlaceholder } aus './getPlaceholder' importiere { IInput } aus './types' const NumberInput: React.FC<IInput> = ({ control, name, ...props }) => const placeholder = getPlaceholder({ type: "number" }); const numericOnChange = (event: ChangeEvent<HTMLInputElement>) => if (event.target.value === '') return null; return +event.target.value; } zurückkehren ( <Controller Kontrolle={Kontrolle} name={name} render={({ field: { onChange, ...field } }) => <Eingabe {...Requisiten} {...Feld} type="Nummer" placeholder={placeholder} onChange={(event) => const value = numericOnChange(event) onChange(Wert) }} className="h-[20px] pl-[4px] py-[8px] bg-transparenter Rand-b border-b-[#646464] focus:border-b-[#3898EC] text-[13px] text-[#F00] placeholder-[#646464] Outline-none m-1 w-full" /> )} /> ) } Standard-NumberInput</pre> exportieren <p>Theoretisch sollte dies funktionieren, in der Praxis wird jedoch ein Fehler aufgrund eines ungültigen Hook-Aufrufs angezeigt. </p>
P粉752479467
P粉752479467

Antworte allen(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" />
  )}
/>

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage