React'teki useForm "tek bir tıklama geride" [duplicate]

0

Soru

React'te useForm hook kullanıyorum ve bazı nedenlerden dolayı forma değerler girdiğimde ve gönder düğmesine tıkladığımda, durum gönderdiğim değerleri almaz, ancak boş değerleri alır.

Ardından, forma ikinci bir değer kümesi girip gönderdiğimde, durum ilk gönderimin değerlerini alır.

Her zaman "bir tık geride" gidiyor gibi görünüyor (konsola bakın.registerAccount işlevinde oturum açın)

İçindeki handlesubmit'i, hesapları ilk tıklamada tutan durumun güncellemesini yürütmesi gereken registerAccount işleviyle bağladım.

Ben bir şey eksik?

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

En iyi cevabı

0

sorun konsolunuzda.günlük(). durum güncelleştirilmeden önce konsol günlüğüne yazıyorsunuz. useState eşzamansız olarak çalıştığından beri.

öğelerinizin durumunu görmek istiyorsanız, useeffect'i aşağıdaki gibi kullanmanız gerekir.

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

harika, çok teşekkürler!
Robtc83

Diğer dillerde

Bu sayfa diğer dillerde

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