UseForm à Réagir est "un clic de souris derrière" [dupliquer]

0

La question

Je suis en utilisant useForm crochet à réagir, et pour quelque raison quand je entrer des valeurs dans le formulaire et cliquez sur le bouton "soumettre", l'état ne prend pas les valeurs qui me sont soumis, mais prend les valeurs de vide.

Puis, quand j'entre dans une deuxième série de valeurs dans le formulaire et le soumettre, l'état prend les valeurs de la première soumission.

Il semble qu'il en va toujours en "un seul clic derrière" (voir la console.journal de bord à la registerAccount fonction)

J'ai relié le handleSubmit à l'intérieur de la avec la registerAccount fonction, qui doit exécuter la mise à jour de l'état qui tient la comptabilité sur le premier clic.

Ai-je raté quelque chose?

import {useForm} from 'react-hook-form'

const AddAccount = ()=> {

    const {register, handleSubmit, formState: { errors }} = useForm()
    
    const [items, setItems] = useState([])

    const registerAccount = (data)=> {
          setItems([...items, data]) 
          console.log(items)
    }

return(

<div>    

    <div className="grid grid-cols-1 justify-items-center">
        <h1 className="text-black font-bold py-2 text-2xl" >Agrega una cuenta</h1>
        <form onSubmit={handleSubmit(registerAccount)}>
            <table className="table-fixed">
                <thead>
                    <th className="w-1/2 "></th>
                    <th className="w-1/2 "></th>
                </thead>
                <tbody>
                    <tr>
                        <td><label className="py-1">Alias de la cuenta: </label></td>
                        <td><input defaultValue="" name="accountAlias" placeholder="Alias" 
                        className= "my-3 border-solid border-2 border-gray-900 py-1 px-3" 
                        {...register("accountAlias", {required: "Introduce el nombre de la cuenta"})}/>
                        <p className="text-red-500 text-sm">{errors.accountAlias?.message}</p>
                            </td>
                            
                    </tr>
                    <tr>
                        <td><label className="py-1">Tipo de cuenta: </label></td>
                        
                        <td><select name="accountType" className= "my-3 border-solid border-2 border-gray-900 py-1 px-3"
                        {...register("accountType", {required: "Selecciona el tipo de cuenta"})}>
                            <option value="">Selecciona...</option>
                            <option value="cuenta de gastos">Cuenta de gastos</option>
                            <option value="ahorro">Ahorro</option>
                            <option value="tarjeta de crédito">Tarjeta de crédito</option>
                            <option value="inversión">Inversión</option>
                            </select>
                            <p className="text-red-500 text-sm">{errors.accountType?.message}</p>
                            </td>
                    </tr>
                    <tr>
                        
                    </tr>
                </tbody>
            </table>

            <button className="bg-blue-500 text-white py-2 px-6 px-2 mt-4">Agregar</button>
        </form>
    </div>

</div>
)
}

export default AddAccount```
1

La meilleure réponse

0

le problème est dans votre console.log(). vous écrivez un journal de la console avant de l'état est d'obtenir des mises à jour. depuis useState effectue de manière asynchrone.

si vous voulez voir de vos articles à l'état, alors vous devez utiliser useEffect de la manière suivante.

   useEffect(() => {
        console.log(items)
    }, [items]);
2021-11-24 05:29:23

super, merci beaucoup!
Robtc83

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................