Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

306
Views
Reaccionar: DRY Estado del conjunto de componentes funcionales con variable

Tengo una serie de componentes de entrada y quiero usar solo una función onChange.

Dentro de un componente de clase, sé que puedo hacer algo como lo siguiente para adaptarme a los diferentes estados:

 inputChange(input) { this.setState({ [input.name]: input, }); }

¿Cómo, dentro de un componente funcional, puedo actualizar el estado con solo una función onChange ?

Ejemplo de un componente:

 function Form(){ const [selectedClient, updateSelectedClient] = useState(null); const [selectedLocation, updateSelectedLocation] = useState(null); return( <input value={selectedClient} id="selectedClient" name="selectedClient" onChange={???} /> <input value={selectedLocation} id="selectedLocation" name="selectedLocation" onChange={???} /> ); } Thank you for the time!
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Dado que esta es una forma, combinaría los estados en uno, inicializándolo con un objeto, y luego, cuando se llame al controlador onChange , actualice la propiedad identificada por la id de entrada con el valor.

useEffect se usa aquí para registrar el resultado de actualizar el estado.

 const { useEffect, useState } = React; function Example() { const [form, setForm] = useState({}); useEffect(() => { console.log(form); }, [form]) function handleChange(e) { // Grab the id and value from the input const { id, value } = e.target; // Create a new object by spreading out the current form // state, and setting the state property to the new value setForm({ ...form, [id]: value }); } return ( <div> Client: <input value={form.client} id="client" name="client" onChange={handleChange} /> Location: <input value={form.location} id="location" name="location" onChange={handleChange} /> </div> ); } // Render it ReactDOM.render( <Example />, document.getElementById("react") );
 input { display: block; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script> <div id="react"></div>

about 4 years ago · Juan Pablo Isaza Report

0

use el mismo método que usó en la clase, la diferencia es que combina el cliente y la ubicación en un objeto que representará el estado, y aprovecha las id :

 const {useState} = React; function Form(){ const [selectedClientOrLocation,setSelectedClientOrLocation] = useState({ selectedClient:"", selectedLocation:"" }) const handleChange = (e) =>{ setSelectedClientOrLocation({...selectedClientOrLocation,[e.target.id]:e.target.value}) } return( <form> <label htmlFor="selectedClient"> Client <input value={selectedClientOrLocation.selectedClient} id="selectedClient" name="selectedClient" onChange={handleChange} /> </label> <br/> <label htmlFor="selectedLocation"> Location <input value={selectedClientOrLocation.selectedLocation} id="selectedLocation" name="selectedLocation" onChange={handleChange} /> </label> </form> ) } ReactDOM.render(<Form/>,document.getElementById('root'))
 <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script> <div id="root"></div>

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!