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

414
Vistas
Reaccionar: alternar la visualización de un componente desde el onClick de otro componente

Estoy tratando de construir mi primer proyecto React, y actualmente estoy armando un botón de navegación de hamburguesas y un menú que aparece al hacer clic en la navegación.

He dividido esto en dos componentes; Hamburguesa y MenuOverlay. El código para ambos está debajo.

Actualmente tengo un onClick en Hamburger alternando una clase en él, pero ¿cómo cambiaría también el menú de ese clic? Está oculto con pantalla: ninguno; por defecto. Probablemente una pregunta muy básica, así que disculpas, todavía estoy tratando de entender React.

superposición de menú

 import React from 'react'; import { Link } from 'react-router'; const MenuOverlay = () => { return ( <div className="menuOverlay"> <div className="innerMenu"> <p><Link to="/">Home</Link></p> <p><Link to="/">About</Link></p> <p><Link to="/">Contact</Link></p> </div> </div> ); }; export default MenuOverlay;

Hamburguesa

 import React, { Component } from 'react'; class Hamburger extends Component { constructor(props) { super(props); this.state = { active: '' }; this.handleClick = this.handleClick.bind(this); } handleClick() { var toggle = this.state.active === 'is-active' ? '' : 'is-active'; this.setState({active: toggle}); } render() { return ( <button className={`hamburger hamburger--emphatic fadein one ${this.state.active}`} onClick={this.handleClick} type="button"> <span className="homeMenuTextButton">Menu</span> <span className="hamburger-box"> <span className="hamburger-inner"></span> </span> </button> ); } } export default Hamburger;
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En la forma más simple, tendría un componente de contenedor que los envuelve a ambos y administra el estado de los componentes.

 <MenuContainer> <Hamburger /> <MenuOverlay /> </MenuContainer>

Y en <MenuContainer> tendría un estado de active algún pseudocódigo rápido.

 class MenuContainer extends React.Component { constructor() { super(); this.state = { active: false} } toggleMenu = () => { // function that will toggle active/false this.setState((prevState) => { active: !prevState.active }); } render() { return ( <div> <Hamburger active={this.state.active} onClick={this.toggleMenu} /> <MenuOverlay active={this.state.active} /> </div> ) } }

entonces, en hamburger, solo usaría this.props.onClick para cambiar el estado de activo y luego, en esos componentes correspondientes, use el accesorio de this.props.active para determinar qué clases se deben aplicar, etc.

over 4 years ago · Santiago Trujillo Denunciar

0

Dado que un elemento no es el padre de otro elemento, deberá extraer la variable manteniendo la información de alternancia en la cadena de elementos hasta que resida en un lugar común.

Es decir, mantenga la variable de estado "activa" en un ancestro de los dos elementos y proporcione a Hamburger una devolución de llamada en los accesorios que, cuando se llama, modifica el estado de ese componente ancestro. Al mismo tiempo, también pase la variable de estado activo a MenuOverlay como accesorio, y todo debería funcionar en conjunto.

Ver aquí para más información:

https://facebook.github.io/react/tutorial/tutorial.html#lifting-state-up

Específicamente,

Cuando desee agregar datos de varios elementos secundarios o que dos componentes secundarios se comuniquen entre sí, mueva el estado hacia arriba para que viva en el componente principal. Luego, el padre puede devolver el estado a los hijos a través de accesorios, de modo que los componentes secundarios estén siempre sincronizados entre sí y con el padre.

over 4 years ago · Santiago Trujillo 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