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

306
Vistas
Pasar mensajes entre componentes en React.js

Tenía algunas preguntas sobre la comunicación entre los componentes de React.js. Esto está en contexto sin el uso de redux. Así es como se ve mi jerarquía de componentes.

 App / \ / \ | | ▼ ▼ Board Dashboard | ▼ Cell

A continuación hay algunas suposiciones/patrones que utilizo para que los componentes se comuniquen.

  1. Si necesitamos pasar mensajes de un componente principal a componentes secundarios, lo hacemos usando accesorios. Por ejemplo, mientras creamos un Tablero, pasamos filas, columnas como accesorios.

     <Board rows={5} cols={5} />
  2. Si necesitamos pasar mensajes de un componente secundario a componentes principales, lo hacemos pasando una devolución de llamada. Por ejemplo, pasamos una devolución de llamada play() de Board a Cell. Dentro de Cell, configuramos el controlador onClick para que sea la devolución de llamada pasada, es decir, play().

     <Cell onClick={this.props.play(this.props.id)} />
  3. La pregunta abierta que tenía era cómo se pueden pasar mensajes entre componentes hermanos (ejemplo Dashboard to Cell). Un caso de uso es restablecer mi componente Board cuando se hace clic en un botón de reinicio dentro del componente Dashboard. Así es como se ve el botón de reinicio dentro del Tablero. Mi pregunta es una vez que el mensaje de reinicio llega al componente de la aplicación, ¿cuál es la mejor práctica para pasarlo a Board?

     <input type="button" value="reset" onClick={this.props.reset} />

Sería genial recibir comentarios sobre 1 y 2. Además, la mejor práctica para 3.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

redux

Esta es la razón exacta por la que Redux es tan genial. Si está utilizando Redux, todos estos componentes tienen una sola cosa en común; todos están leyendo sus valores desde el estado de la aplicación. El flujo que usaría es el siguiente:

  1. El usuario hace clic en el botón de reinicio que se encuentra dentro del componente del tablero

  2. La función asociada con ese clic solo hace una cosa. Despacha una acción "RESET_BOARD"

  3. En el reductor, la acción RESET_BOARD restablece el estado de la placa.

  4. Cuando se vuelve a renderizar, el tablero se pasa en accesorios, al igual que antes, solo se le pasa el estado vacío.

Sin reducción

Si no tiene redux a mano, entonces el enfoque de devolución de llamada del padre es la forma sensata de hacerlo. Si está manteniendo el estado en el componente de la App , la aplicación luego restablece su estado y activa una nueva representación manualmente. Esto hará que el tablero se vuelva a renderizar con diferentes accesorios.

over 4 years ago · Santiago Trujillo Denunciar

0

Pero también es restricción; la comunicación entre dos componentes está restringida en 3 casos:

  1. Actualizaciones de los padres Niño:

  2. El niño actualiza al padre:

  3. hermanos (Hermanos) se actualizan entre sí (hermano)


Busquemos su pregunta ahora. Su pregunta es sobre el tercer caso:

La idea principal es hacer que el abuelo ( App ) sea un proxy para transferir la comunicación.


 App / \ / \ | | ▼ ▼ Board Dashboard | ▼ Cell

Tablero.js

 reset(event) { //.... local calls (concerning Dashboard or its children ) // then , external calls (concerning outside Dashboard) if(this.props.onReset) this.props.onReset(event); } <input type="button" value="reset" onClick={this.reset} />

App.js (el 1ˢᵗ abuelo entre [ Dashboard , Board>Cell ]):

 onDashboardReset(event) { this.setState({dashboardIsReset: true}) } <Dashboard onReset={this.onDashboardReset} /> <Board dashboardIsReset={this.state.dashboardIsReset} />

Tablero.js:

 // ... has props `dashboardIsReset` and forward it to its children (`Cell`) if needed
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