UseForm în Reacționa este "un singur clic spatele" [duplicat]

0

Problema

Eu sunt, folosind useForm cârlig în reacționa, și pentru un motiv oarecare, atunci când am introduceți valori în formă și faceți clic pe butonul submit, statul nu ia valori-am prezentat, dar ia valorile de gol.

Apoi, când am introduceți un al doilea set de valori în formă și să-l prezinte, statul ia valori de la prima depunere.

Se pare că ea merge întotdeauna "un singur clic spatele" (a se vedea consola.jurnalul de la registerAccount funcția)

Am legat handleSubmit în interiorul cu registerAccount funcție, care ar trebui să execute actualizarea de stat care ține conturile pe primul click.

Îmi scapă ceva?

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

Cel mai bun răspuns

0

problema este în consolă.log(). ai scris la jurnalul de consolă înainte stat este obtinerea actualizate. deoarece useState se desfășoară asincron.

dacă vrei să-ți vezi articole de stat, atunci ai nevoie pentru a utiliza useEffect după cum urmează.

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

super, multumesc mult!!!
Robtc83

În alte limbi

Această pagină este în alte limbi

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