React.js + Reactstrap несколько модальных окон в одном компоненте

Я пытаюсь использовать reactstrap для отображения двух разных модальных окон onClick в моем компоненте нижнего колонтитула.

Мне удалось создать нижний колонтитул на основе классов, который переключает модальную видимость в зависимости от состояния и внешнего модального элемента для отображения модального окна при нажатии на каждую «ссылку».

Но я все еще пытаюсь найти способ отображать разный контент (заголовок и модальное тело) в одном и том же модальном окне для каждой ссылки.

//FOOTER

import React, { Component } from 'react';

import MainModal from '../../elements/modal';


class Footer extends Component{

  state = {
    modal: false
  }

  toggle = () => {
    this.setState({
        modal: !this.state.modal
    })
  }

  render(){
    return(
      <footer className="container-fluid footer">
          <div className="modals sm-text-center">
              <span className="sm-block"><span className="fLink" onClick={this.toggle}>Terms of use</span> | <span className="fLink" onClick={this.toggle}>Privacy Policy</span></span>
            <div className="clearfix"/>
          </div>
          <MainModal type="basic" toggle={this.toggle} modal={this.state.modal}/>
      </footer>
    )
  }
}
export default Footer;




//MODAL TEMPLATE

import React, { Component } from 'react';
import { Modal, ModalHeader, ModalBody } from 'reactstrap';


    class MainModal extends Component {

        render(){
            return(
                <Modal isOpen={this.props.modal} toggle={this.props.toggle}>
                    <ModalHeader toggle={this.props.toggle}>Modal title</ModalHeader>
                    <ModalBody>
                        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
                    </ModalBody>
                </Modal>
            );
        }
    };

export default MainModal;

Каким будет лучший / элегантный способ отображения содержимого для Условий использования и политики конфиденциальности?


person user3359675    schedule 26.11.2018    source источник


Ответы (1)


Передайте «заголовок» и «содержимое тела» методу toggle (), а затем <MainModal />

Модальный:

<Modal isOpen={this.props.isModalOpen} toggle={this.props.toggle}>
    <ModalHeader toggle={this.props.toggle}>
      {this.props.modalTitle}
    </ModalHeader>
    <ModalBody>{this.props.modalBody}</ModalBody>
</Modal>

Нижний колонтитул:

<span
  className="fLink"
  onClick={e =>
     this.toggle("Terms of Use", "Body for Terms of User")
  }
>
  Terms of use
</span>

<span
 className="fLink"
 onClick={e =>
    this.toggle("Privacy Policy", "Body for Privacy Policy")
 }
>
  Privacy Policy
</span>

Состояние:

state = {
 isModalOpen: false,
 modalTitle: "",
 modalBody: ""
};

Метод переключения:

toggle = (title, body) => {
 this.setState({
   isModalOpen: !this.state.modal,
   modalTitle: title,
   modalBody: body
 });
};

Вот полное решение: https://codesandbox.io/s/63jqmvzvn

Надеюсь, это тебе поможет.

person Sunil Tako    schedule 26.11.2018