J'ai ce code et j'essaie de connecter le composant Combobox à partir de Headless UI à l'aide du formulaire de réaction-hook. Chaque fois que j'essaie de saisir différentes valeurs et de sélectionner différentes options, je reçois le message d'erreur :
无法读取未定义的属性(读取“名称”)
J'ai essayé beaucoup de variantes différentes, mais je n'ai pas réussi à trouver la bonne méthode Combobox
与 register
一起使用。任何帮助,将不胜感激。我想使用 register
来完成这项工作,并且不想使用其他 Controller
方法来执行 react-hook-form
.
import React from "react"; import { useState } from "react"; import { Combobox } from "@headlessui/react"; import { useForm } from "react-hook-form"; const people = [ { id: 1, name: "Durward Reynolds" }, { id: 2, name: "Kenton Towne" }, { id: 3, name: "Therese Wunsch" }, { id: 4, name: "Benedict Kessler" }, { id: 5, name: "Katelyn Rohan" }, ]; function Example() { const [query, setQuery] = useState(""); const filteredPeople = query === "" ? people : people.filter((person) => { return person.name.toLowerCase().includes(query.toLowerCase()); }); const { register, handleSubmit, setValue, formState: { errors }, } = useForm(); const submit = (data) => { console.log(JSON.stringify(data)); }; return ( <form onSubmit={handleSubmit(submit)}> <Combobox as="div" name="assignee" defaultValue={people[0]} {...register("assignee")} > <Combobox.Input onChange={(event) => setQuery(event.target.value)} displayValue={(person) => person.name} /> <Combobox.Options> {filteredPeople.map((person) => ( <Combobox.Option key={person.id} value={person}> {person.name} </Combobox.Option> ))} </Combobox.Options> </Combobox> <button>Submit</button> </form> ); } export default function check() { return ( <div> <Example /> </div> ); }
Ce n'est probablement pas une bonne idée d'ajouter directement
react-hook-form
处理程序附加到Combobox
.Faire une demande de copie dans-
Input > onChange
将为您提供一个带有字符串target.value
的事件,而不是来自的Location / User / ...
模型API。您会在handleSubmit
pour le « décompresser » ? Et, si oui, comment gérez-vous les erreurs API là ? !L'entrée peut être liée à des erreurs d'API
Combobox
level. Vous devez faire très attention à faire la différence entre les chaînes de « réussite » et d’« échec » au niveau des composants du formulaire.Les chaînes ne peuvent pas être analysées au niveau du composant de formulaire. Surtout en mode « Multiple », vous pouvez présenter des informations agrégées dans l'entrée, telles que « 3 éléments ont été sélectionnés ». Si vous le faisiez
register
扩展到Combobox.Input
, ce serait votre valeur.Enfin, dans certaines autres implémentations (non-HeadlessUI)
Combobox
, la valeur conservera la saisie utilisateur d'origine.Par exemple :
Combobox
采用新值,但Combobox.Input
Prend la nouvelle valeur, mais la valeurCombobox.Input
reste "United"Vous souhaiterez peut-être vous en tenir à une approche portable et évolutive.
La conclusion est la même : laissez
RHF. 🎜Combobox
为您解析和转换值。将onChange
提供给Combobox
,而不是Combobox.Input
analyser et convertir les valeurs pour vous. FournissezonChange
à au lieu deCombobox.Input
. Mais cela n’est possible qu’avec la variante API Controlled