UseForm v Reagovat je "jedním kliknutím za" [duplicitní]

0

Otázka

Používám useForm háček reagovat, a z nějakého důvodu, když jsem zadejte hodnoty do formuláře a klikněte na tlačítko odeslat, stát nebude mít hodnoty jsem předložil, ale trvá hodnoty prázdné.

Pak, když jsem zadejte další sadu hodnot do formuláře a odešlete jej, stát bere hodnoty z prvního podání.

Zdá se, že to vždy jde "jedním kliknutím za" (viz konzole.přihlaste se na registerAccount funkce)

Jsem spojil handleSubmit uvnitř s registerAccount funkce, které by měl provést aktualizaci stavu, který udržuje účty na první kliknutí.

Jsem něco chybí?

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

Nejlepší odpověď

0

problém je na vaší konzoli.log(). psaní do konzole přihlásit, než budete stát, je stále aktualizován. od useState provádí asynchronně.

pokud chcete vidět vaše položky státu, pak je třeba použít useEffect jako následující.

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

skvělé, díky moc!
Robtc83

V jiných jazycích

Tato stránka je v jiných jazycích

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