Publicación: about 1 month
// UserFormUtil.js // Deserializer: transforma de array de objetos a objeto plano export const deserializer = (initialValue) => { const result = {}; initialValue?.fields?.forEach(({ key, value }) => { result[key] = value; }); return result; } // Serializer: transforma de objeto plano a array de objetos export const serializer = (values) => { return { fields: Object.entries(values).map(([key, value]) => ({ key, value: typeof value === "string" ? value.trim() : value })) }; }
// UserForm.js import React, { useState } from “react”; import { serializer, deserializer } from ‘UserFormUtil’ function UserForm({ initialValue, onSubmit }) { const [values, setValues] = useState(() => deserializer(initialValue)); const handleChange = (e) => { const { name, value } = e.target; setValues((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = (e) => { e.preventDefault(); onSubmit(serializer(values); }; return ( <form onSubmit={handleSubmit}> <label> Nombre: <input type="text" name="name" value={values.name || ""} onChange={handleChange} /> </label> <br /> <label> Correo: <input type="email" name="email" value={values.email || ""} onChange={handleChange} /> </label> <br /> <button type="submit">Enviar</button> </form> ); } export default UserForm; function UserForm({ initialValue, onSubmit }) { const [values, setValues] = useState(() => deserializer(initialValue)); const handleChange = (e) => { const { name, value } = e.target; setValues((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = (e) => { e.preventDefault(); const serializedData = serializer(values); onSubmit(serializedData); }; return ( <form onSubmit={handleSubmit}> <label> Nombre: <input type="text" name="name" value={values.name || ""} onChange={handleChange} /> </label> <label> Correo: <input type="email" name="email" value={values.email || ""} onChange={handleChange} /> </label> <button type="submit">Enviar</button> </form> ); } export default UserForm;
const initialValue = { fields: [ { key: "name", value: "Ana" }, { key: "email", value: "[email protected]" } ] }; <UserForm initialValue={initialValue} onSubmit={(data) => console.log("Enviado al servidor:", data)} />
{ fields: [ { key: "name", value: "Ana" }, { key: "email", value: "[email protected]" } ] }