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

179
Views
Obtener los datos correctos del elemento seleccionado usando useParams

Estoy tratando de obtener datos solo de un elemento específico seleccionado, pero desafortunadamente no sé cómo abordar esto.

Esto es lo que probé:

Mi ruta se ve así:

 <Router> <Switch> <Route exact path="/explore"> <ExploreCard closetItems={closetItems} /> </Route> <Route path="/explore/:id"> <ExploreDetail closetItems={closetItems} setClosetItems={setClosetItems} /> </Route> </Switch> </Router>

Y la obtención de la API:

 const [closetItems, setClosetItems] = useState([]); useEffect(() => { const getClosets = async () => { try { const response = await axios.get( "https://api.npoint.io/eb35d003cd0c1991c6aa" ); const closet = response.data; setClosetItems(closet); } catch (error) { console.log(error); } }; getClosets(); }, []);

Luego estoy mapeando los elementos de esta manera:

 {closetItems.map((list) => ( <div key={list.id}> <h4> Name: <Link to={`/explore/${list.id}`}>{list.name}</Link> </h4> </div> ))}

Aquí lo que sucede usando el código de arriba:

  1. Llego a la ruta correcta (si elijo un elemento con ID de 2, la ruta es /explore/2 )
  2. La ruta /explore/2 muestra datos detallados de todos los elementos, no solo de id=2

Aquí cómo se ve:

 const ExploreDetails = ({ closetItems, setClosetItems }) => { const { id } = useParams(); return ( {closetItems // .filter((list) => list.id === id) .map((list) => ( <div key={list.id}> <h2>Name: {list.name}</h2> <h4>Category: {list.email}</h4> </div> ))}

¿Cómo puedo obtener datos solo del elemento seleccionado con id = 2 ?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Agregando de la respuesta de Javad Masoudian, si desea devolver solo el elemento que coincide con alguna condición, también puede usar Array#find y luego usarlo así:

 //... const params = useParams(); const item = closetItems.find(({ id }) => id === parseInt(params.id)); //... return ( <> <h2>Name: {item.name}</h2> <h4>Category: {item.email}</h4> </> );

De esta manera, no obtiene una matriz, sino el objeto en sí que puede usar directamente.

about 4 years ago · Juan Pablo Isaza Report

0

Todos los parámetros de la URL son de tipo cadena.

Puede usar el método parseInt() para convertir a tipo entero.

 const ExploreDetails = ({ closetItems, setClosetItems }) => { const { id } = useParams(); return ( {closetItems .filter((list) => list.id === parseInt(id)) .map((list) => ( <div key={list.id}> <h2>Name: {list.name}</h2> <h4>Category: {list.email}</h4> </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!