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

175
Views
¿Cómo renderizo solo un producto en lugar de todos usando .map?

Estoy haciendo un proyecto de plataforma de comercio electrónico pero necesito ayuda. en mi página principal tengo los productos, usé .map para iterar a través de todos ellos para representarlos a todos. Quiero que sea donde, si hace clic en un botón de un producto, lo llevará a la página de ese producto con más detalles. Mi único problema es que no sé cómo renderizar un producto y no varios. aquí está el código en el que estoy tratando de trabajar

 import React from 'react'; import { Card, CardMedia, CardContent, CardActions, Typography, IconButton, Button } from '@material-ui/core'; import useStyles from './styles'; const ProductPage = ({ products, onAddToCart }) => { const classes = useStyles(); {products.map((product) => ( console.log(product) ))} return ( <Card className={classes.root}> </Card> ); }; export default ProductPage;

básicamente, solo mapea todos los productos y la consola registra todos los productos. Pero solo quiero que console.log el producto en el que hice clic. ¿Cómo puedo hacer eso?

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

0

Para hacer esto, deberá enviar la ID del producto al componente. Puede usar React Router para enviar la ID del producto en la URL como parámetros.

En tus Rutas, Agrega esto para enviar ID en la URL

 <Route path="/products/:id"> <Product /> </Route>

Una vez que tenga la identificación del producto, puede crear una API para obtener los detalles del producto o puede filtrar la matriz de productos.

En la página de productos:

 const [product, setProduct] = React.useState(); let { id } = useParams(); const getProductDetails = async (id) => { let url = `${apiUrl}/api/product/getDetailsbyId/${id}`; const response = await axios.get(url); setProduct(response.data.data[0]); }; const filterProduct = (id) => { let product = props.products.filter(product => product.id === id); setProduct(product); }; useEffect(() => { getProductDetails(id); // Or use filterProduct Function }, []);

about 4 years ago · Juan Pablo Isaza Report

0

import React from 'react'; import { Card, CardMedia, CardContent, CardActions, Typography, IconButton, Button } from '@material-ui/core'; import useStyles from './styles'; const ProductPage = ({ products, onAddToCart }) => { const [selectedProduct, setSelectedProduct] = useState(null) const classes = useStyles(); return ( <> {selectedProduct ? ( <Card className={classes.root}> {selectedProduct?.name} </Card> ):( products.map((product) => ( <div onClick={() => setSelectedProduct(product)}> {product?.name} </div> )) ) } </> ); }; export default ProductPage;

Pero mejor es hacer clic en un producto, saltar a una nueva página pasando id & fetch para mostrar los detalles del producto en esa nueva página con esa identificación.

about 4 years ago · Juan Pablo Isaza Report

0

Realmente no entiendo lo que estás mirando.

Si está mirando un solo producto, entonces solo debe enviar el producto que le preocupa y solo mostrar la página del producto cuando hace clic en ese producto.

Si simplemente intenta enumerar todos los productos, debe devolver un componente Product que tenga un controlador onClick que maneje sus clics.

Algo como esto:

 products.map(product => <Product onClick={console.log} {/* whatever other product props here*/} /> const Product = props => { // fill in your product details here... }

Pero si no estás haciendo esto, creo que estás conceptualmente confundido. De cualquier manera, creo que debería tener una lista de productos que tienen un controlador de clics y luego mostrar una página diferente cada vez que hace clic en un producto específico.

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!