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

134
Vistas
¿Los datos se vuelven a renderizar solo una vez al hacer clic usando la función con filtro () en reactjs?

Tengo una barra de navegación con 3 botones (no la barra de navegación principal) que debería filtrar los elementos del menú en Pizzas, Acompañamientos, Bebidas cuando se hace clic. Cuando hago clic en cualquiera de los botones, solo muestra uno de los menús filtrados (si hago clic en Pizzas, muestra la lista de diferentes pizzas).

El problema es que solo funciona una vez, por lo que si vuelvo a hacer clic o hago clic en Acompañamientos o Bebidas, no muestra nada, solo una página vacía. Pensé en usar useEffect para volver a renderizar, pero no puedo pensar en cómo usarlo.

¿Cómo puedo hacer que cada botón muestre los diferentes datos/elementos del menú al hacer clic en cada categoría del menú (Pizzas, Acompañamientos, Bebidas)?

 const Menu = () => { const [menuList, setMenuList] = useState(initialMenuList); function eventMenuClick(e) { const nameSelection = e.currentTarget.textContent; setMenuList((menuList) => { return menuList.filter((item) => { if (item.category === nameSelection) { return console.log(item); } return null; }); }); } return ( <div className="container"> <h1>Menu</h1> <div className="nav-container"> <ul className="menu-list"> <li className="menutype" onClick={eventMenuClick}>Pizzas</li> <li className="menutype" onClick={eventMenuClick}>Sides</li> <li className="menutype" onClick={eventMenuClick}>Drinks</li> </ul> </div> <MenuList menuList={menuList} /> <NavBar /> </div> ); }; export default Menu;
 const MenuList = ({ menuList }) => { return ( <div className="menulist-container"> {menuList.map((item) => ( <MenuItem key={item.id} title={item.name} image={item.image} price1={item.priceM} price2={item.priceL} /> ))} </div> ); }; export default MenuList;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En su menú, puede tener otro estado que contenga solo valores filtrados.

 const [menuList, setMenuList] = useState(initialMenuList); const [visibleMenu, setVisibleMenu] = useState(initialMenuList); // <- HERE function eventMenuClick(e) { const nameSelection = e.currentTarget.textContent; const filtered = menuList.filter((item) => item.category === nameSelection); setVisibleMenu(filtered); }

Y cuando represente su lista, en lugar de los datos originales, use filtrado para que se represente.

 <MenuList menuList={visibleMenu} />
about 4 years ago · Juan Pablo Isaza 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