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

269
Vistas
Abrir modal al hacer clic en un botón diferente del componente principal

Soy bastante nuevo para reaccionar y estoy teniendo un problema. Estoy usando reactstrap para llamar a un modal al hacer clic en un botón. En los documentos de reactstrap, el modal se llama al hacer clic en un botón en el componente modal de la siguiente manera:

 import React from 'react'; import { Button, Modal, ModalFooter, ModalHeader, ModalBody } from 'reactstrap'; class SubmitConfirmation extends React.Component { constructor(props) { super(props); this.state = { modal: false, fade: true, }; this.toggle = this.toggle.bind(this); } toggle() { this.setState({ modal: !this.state.modal, fade: !this.state.fade, }); } render() { return ( <div> <Button color="danger" onClick={this.toggle}> TOGGLE </Button> <Modal isOpen={this.state.modal} toggle={this.toggle} fade={this.state.fade} className={this.props.className}> <ModalHeader toggle={this.toggle}>Modal title</ModalHeader> <ModalBody></ModalBody> <ModalFooter> <Button color="primary" onClick={this.toggle}> Do Something </Button>{' '} <Button color="secondary" onClick={this.toggle}> Cancel </Button> </ModalFooter> </Modal> </div> ); } } export default SubmitConfirmation;

Quiero llamar al modal desde el clic de un botón en un componente principal ¿Cómo hago esto?

 export default class SampleApp extends React.Component { constructor(props) { super(props); this.state = {} } render() { return ( <div> <Button color="primary" size="sm" style={{ width: '100%' }} onClick={this.toggle} Submit </Button> </div> ) } }

¿Cómo llamo al botón desde el componente principal?

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

0

Parece que olvidaste agregar this.props.toggle

 <div> <Button color="primary" size="sm" style={{ width: '100%' }} onClick={this.props.toggle} Submit </Button> </div>

Dado que está pasando la función de alternar a través de accesorios, la función pertenece a la propiedad this.props de su componente, al igual que cualquier otra propiedad que pase al componente secundario a través de accesorios

about 4 years ago · Juan Pablo Isaza Denunciar

0

Deberá mover el estado al componente principal para obtener esta funcionalidad,

Parent Component:

 import React from "react"; import { Button } from "reactstrap"; import Child from "./Child"; export default class SampleApp extends React.Component { constructor(props) { super(props); this.state = { modal: false, fade: true }; this.toggle = this.toggle.bind(this); } toggle() { this.setState({ modal: !this.state.modal, fade: !this.state.fade }); } render() { return ( <> <Button color="primary" size="sm" style={{ width: "100%" }} onClick={this.toggle} > Open </Button> <Child modal={this.state.modal} toggle={this.toggle} fade={this.state.fade} /> </> ); } }

Child Component

 import React from "react"; import { Button, Modal, ModalFooter, ModalHeader, ModalBody } from "reactstrap"; class SubmitConfirmation extends React.Component { render() { return ( <Modal isOpen={this.props.modal} toggle={this.props.toggle} fade={this.props.fade} className={this.props.className} > <ModalHeader toggle={this.toggle}>Modal title</ModalHeader> <ModalBody></ModalBody> <ModalFooter> <Button color="primary" onClick={this.toggle}> Do Something </Button>{" "} <Button color="secondary" onClick={this.toggle}> Cancel </Button> </ModalFooter> </Modal> ); } } export default SubmitConfirmation;
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