UseForm v Reagovať je "jedno kliknutie za" [duplicitné]

0

Otázka

Ja používam useForm háčik v reagovať, a z nejakého dôvodu, keď som zadajte hodnoty do formulára a kliknite na tlačidlo odoslať, štát nie je take hodnoty, ktoré som predložil, ale trvá hodnoty prázdne.

Potom, keď som zadať druhú sadu hodnôt do formulára a odošlite ho, berie štát hodnoty prvého podania.

Zdá sa, že to vždy ide "jedným kliknutím pozadu" (pozri konzoly.prihlásiť na registerAccount funkcia)

Som súvisí handleSubmit vo vnútri s registerAccount funkcie, ktoré by mal vykonať aktualizáciu štátu, ktorý vedie účty v prvý kliknite na tlačidlo.

Som niečo chýba?

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

Najlepšiu odpoveď

0

problém je v konzole.prihlásenie(). píšete console log pred štátu je stále aktualizovaný. od useState vykonáva asynchrónne.

ak chcete vidieť váš tovar štátu, potom sa budete musieť použiť useEffect ako nasledujúce.

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

skvelé, ďakujeme!
Robtc83

V iných jazykoch

Táto stránka je v iných jazykoch

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