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

113
Vistas
¿El submenú no funciona para varios elementos en ReactJs?

Tengo un submenú que funciona solo cuando hay un solo elemento single LI pero si aumento LI , entonces no funciona bien. ¿Como puedo resolver esto?

Mi código:-

 import React, { useState } from "react"; import { Link } from "react-router-dom"; const Home = (props) => { const [subMenuOpen, setSubMenuOpen] = useState(false); return ( <> <ul className="submenu"> <li> <Link to="/"> <div onClick={() => setSubMenuOpen(!subMenuOpen)} > <span>test</span> </div> </Link> <ul class={`sub-menu ${subMenuOpen ? "is-open" : ""}`}> <li className="menu-item">Sub-Item 1</li> <li className="menu-item">Sub-Item 2</li> <li className="menu-item">Sub-Item 3</li> </ul> </li> <li> <Link to="/"> <div onClick={() => setSubMenuOpen(!subMenuOpen)} > <span>test</span> </div> </Link> <ul class={`sub-menu ${subMenuOpen ? "is-open" : ""}`}> <li className="menu-item">Sub-Item 1</li> <li className="menu-item">Sub-Item 2</li> <li className="menu-item">Sub-Item 3</li> </ul> </li> </ul> </> ); }; export default Home;
 .sub-menu { display: none;} .sub-menu.is-open { display:block;}

¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Debido a que tiene varios submenús, debe realizar un seguimiento de cuál está abierto, y no puede hacerlo con un solo valor bool.

Si solo tendrá 1 nivel de elementos de menú secundarios, y como máximo uno de ellos puede estar abierto, puede usar un número: -1 -> ningún subelemento está abierto, 0 -> el primer elemento está abierto, etc. como este :

  • const [subMenuOpen, setSubMenuOpen] = useState(-1);
  • 1er div: <div onClick={() => setSubMenuOpen(0)}>
  • 2º div: <div onClick={() => setSubMenuOpen(1)}>
    (etc)
  • 1st ul: <ul class={`sub-menu ${subMenuOpen === 0 ? "is-open" : ""}`}>
  • 2nd ul: <ul class={`sub-menu ${subMenuOpen === 1 ? "is-open" : ""}`}>
    (etc)
  • probablemente también necesite proporcionar algo que borre el menú, por lo que hacer clic fuera del menú ejecutaría setSubMenuOpen(-1) .

Para obtener un comportamiento de alternancia, puede usar una función auxiliar como esta:

  • función auxiliar: const toggleMenu = (x) => setSubMenuOpen(subMenuOpen === x ? -1 : x)
  • 1er div: <div onClick={() => toggleMenu(0)}>
  • 2.º div: <div onClick={() => toggleMenu(1)}>

Si planea tener varios niveles de elementos de menú, una estructura de datos en forma de árbol será más adecuada, tal vez tanto para definir el menú como para realizar un seguimiento del ( sub ) (sub) ( sub ) elemento abierto.

about 4 years ago · Juan Pablo Isaza Denunciar

0

intente usar "className" en lugar de "class" JSX parece ser correcto Creo que tiene un problema en css

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