Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Cómo pasar múltiples datos de formulario onChange del elemento secundario al principal en React.js

Estoy tratando de imprimir la entrada del usuario en tiempo real desde las etiquetas de entrada del usuario. Incluso recibo múltiples entradas de usuario del elemento secundario al elemento principal como una forma de objeto usando useState. Pero cada vez que el usuario intenta completar el segundo campo de entrada, la primera entrada se vuelve a representar y se reemplaza por el estado principal, que es una cadena vacía. código:- Elemento secundario

 import React, { useState } from "react";

const Child = (props) => {
 const [name, setName] = useState("");
 const [age, setAge] = useState("");

 let userData = {
 name: "",
 age: ""
 };
 const nameChangeHandler = (e) => {
 setName(e.target.value);
 userData.name = e.target.value;
 };

 const ageChangeHandler = (e) => {
 setAge(e.target.value);
 userData.age = e.target.value;
 };

 const formOnChageHandler = (e) => {
 e.preventDefault();
 props.getData(userData);
 };
 const fromOnSubmitHandler = (e) => {
 e.preventDefault();
 };
 return (
 <React.Fragment>
 <form onChange={formOnChageHandler} onSubmit={fromOnSubmitHandler}>
 <label htmlFor="name">Name:</label>
 <input
 id="name"
 placeholder="Enter Name"
 value={name}
 onChange={nameChangeHandler}
 />
 <br />
 <label htmlFor="age">Age:</label>
 <input
 id="age"
 placeholder="Enter Age"
 value={age}
 onChange={ageChangeHandler}
 />
 </form>
 </React.Fragment>
 );
};
export default Child;

Elemento padre

 import React, { useState } from "react";
import Child from "./components/Child";

function App() {
 const [name, setName] = useState("");
 const [age, setAge] = useState("");
 let userData = (data) => {
 setName(data.name);
 setAge(data.age);
 };
 return (
 <React.Fragment>
 <Child getData={userData} />
 <h1>Your name is:{name}</h1>
 <h1>Your age is:{age}</h1>
 </React.Fragment>
 );
}

export default App;

código sandbox Link- https://codesandbox.io/s/from-traversing-child-to-parent-to-another-child-ynwyqd?file=/src/App.js:0-441

¿Cómo puedo hacer que ambos datos se reflejen usando onChange del elemento secundario al principal?

almost 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Le sugiero que acumule los datos de usuario en un state .
Como esto.

 const [user, setUser] = useState({
 name: "",
 age: null
 });

Y coloque el state en el padre y páselo como accesorios, también solo tenga una función handleChange para actualizar tanto el name como la age por la id de input

Niño.js

 import React, { useState } from "react";

const Child = ({ user, setUser }) => {
 const handleChange = (e) => {
 setUser((prev) => ({
 ...prev,
 [e.target.id]: e.target.value
 }));
 };

 const formOnChageHandler = (e) => {
 e.preventDefault();
 };
 const fromOnSubmitHandler = (e) => {
 e.preventDefault();
 };

 return (
 <React.Fragment>
 <form onChange={formOnChageHandler} onSubmit={fromOnSubmitHandler}>
 <label htmlFor="name">Name:</label>
 <input
 id="name"
 placeholder="Enter Name"
 value={user.name}
 onChange={handleChange}
 />
 <br />
 <label htmlFor="age">Age:</label>
 <input
 id="age"
 placeholder="Enter Age"
 value={user.age}
 onChange={handleChange}
 />
 </form>
 </React.Fragment>
 );
};
export default Child;

Aplicación.js

 import React, { useState } from "react";
import Child from "./components/Child";

function App() {
 const [user, setUser] = useState({
 name: "",
 age: null
 });

 return (
 <React.Fragment>
 <Child user={user} setUser={setUser} />
 <h1>Your name is:{user.name}</h1>
 <h1>Your age is:{user.age}</h1>
 </React.Fragment>
 );
}

export default App;

CODIGOS Y CAJA

almost 4 years ago · Santiago Trujillo Denunciar

0

Intente usar el componente secundario como se muestra a continuación,

 import React, { useState } from "react";

const Child = (props) => {
 const [name, setName] = useState("");
 const [age, setAge] = useState("");

 let userData = {
 name: name, // the value "name" comes for the local state will be listen to the onChange event every time
 age: age // same applies here as well
 };
 const nameChangeHandler = (e) => {
 setName(e.target.value);
 
 };

 const ageChangeHandler = (e) => {
 setAge(e.target.value);

 };

 const formOnChageHandler = (e) => {
 e.preventDefault();
 props.getData(userData);
 };
 const fromOnSubmitHandler = (e) => {
 e.preventDefault();
 };
 return (
 <React.Fragment>
 <form onSubmit={fromOnSubmitHandler}>
 <label htmlFor="name">Name:</label>
 <input
 id="name"
 placeholder="Enter Name"
 value={name}
 onChange={nameChangeHandler}
 />
 <br />
 <label htmlFor="age">Age:</label>
 <input
 id="age"
 placeholder="Enter Age"
 value={age}
 onChange={ageChangeHandler}
 />
 </form>
 </React.Fragment>
 );
};
export default Child;

almost 4 years ago · Santiago Trujillo Denunciar

0

simplemente use un estado simple para administrar los datos. solo eche un vuezo a continuación al componente de ejemplo creado a partir de su componente secundario.

  1. simplemente usamos el estado single object .
  2. use prop de name como clave para almacenar valor en el estado.

 import React, { useState } from "react";

const Child = (props) => {
 const [formData, setFormData] = useState({});
 
 const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
 setFormData({
 ...formData,
 [e.target.name]: e.target.value,
 });
 };

 const formOnChageHandler = (e) => {
 e.preventDefault();
 props.getData(userData);
 };
 const fromOnSubmitHandler = (e) => {
 e.preventDefault();
 };
 
 return (
 <React.Fragment>
 <form onChange={formOnChageHandler} onSubmit={fromOnSubmitHandler}>
 <label htmlFor="name">Name:</label>
 <input
 id="name"
 placeholder="Enter Name"
 value={name}
 onChange={handleChange}
 name="name"
 />
 <br />
 <label htmlFor="age">Age:</label>
 <input
 id="age"
 placeholder="Enter Age"
 value={age}
 onChange={handleChange}
 name="age"
 />
 </form>
 </React.Fragment>
 );
};
export default Child;
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda