Как скрыть модальное окно начальной загрузки с помощью React JSX

Я учусь реагировать, и я хочу закрыть модальное окно начальной загрузки после обратного вызова Post

Итак, в приведенном ниже коде я хочу скрыть модальное окно в методе hideModal, когда onClick = {() => postDocument.callApi(this.state.document, this.hideModal)} выполняет обратный вызов.

Как я могу это сделать?

import React, { Component } from "react";
import postDocument from "./../rest/PostDocument";
import fetchPersons from "./../rest/FetchPersons";
import PersonList from "./../components/PersonList";
import ShowDatePicker from "./../components/ShowDatePicker";
import moment from "moment";

class SaveDocument extends Component {
  state = {
    persons: [],
    document: {
      documentDate: moment(),
      personFrom: {
        id: ""
      },
      personTo: {
        id: ""
      },
      comments: ""
    }
  };

  hideModal = hideModalInfo => {
    // How do I hide the modal here!
  };

  render() {
    return (
      <div
        className = "modal fade"
        id = "basicExampleModal"
        tabIndex = "-1"
        role = "dialog"
        aria-labelledby = "exampleModalLabel"
        aria-hidden = "true"
      >
        <div className = "modal-dialog" role = "document">
          <div className = "modal-content">
            <div className = "modal-header">
              <h5 className = "modal-title" id = "exampleModalLabel">
                Save document
              </h5>
              <button
                type = "button"
                className = "close"
                data-dismiss = "modal"
                aria-label = "Close"
              >
                <span aria-hidden = "true">&times;</span>
              </button>
            </div>

            <div className = "modal-footer">

              <button
                type = "button"
                className = "btn btn-primary"
                onClick = {() => postDocument.callApi(this.state.document, this.hideModal)}
              >
                Save changes
              </button>
            </div>
          </div>
        </div>
      </div>
    );
  }
}

export default SaveDocument;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
6 663
3

Ответы 3

вы должны привязать этот метод. onClick = {this.handleClick}

class SaveDocument extends Component {

  constructor(props){
       super(props);
       state = { ... }
       //This binding is necessary to make `this` work in the callback
       this.hideModal = this.hideModal.bind(this);
  }

  render(){
     return (<button
            type = "button"
            onClick = {this.hideModal)}
          >)
  }

};

больше информации о привязках

Кроме того, у меня есть базовый пример работы:

https://codepen.io/ene_salinas/pen/yRGMpG

      ReactModal.setAppElement('#main');

      class ExampleApp extends React.Component {
        constructor () {
          super();
          this.state = {
            showModal: false
          };

          this.handleOpenModal = this.handleOpenModal.bind(this);
          this.handleCloseModal = this.handleCloseModal.bind(this);
        }

        handleOpenModal () {
          this.setState({ showModal: true });
        }

        handleCloseModal () {
          this.setState({ showModal: false });
        }

        render () {
          return (
            <div>
              <button onClick = {this.handleOpenModal}>Trigger Modal</button>
              <ReactModal 
                 isOpen = {this.state.showModal}
                 contentLabel = "onRequestClose Example"
                 onRequestClose = {this.handleCloseModal}
                 className = "Modal"
                 overlayClassName = "Overlay"
              >
                <p>Modal text!</p>
                <button onClick = {this.handleCloseModal}>Close Modal</button>
              </ReactModal>
            </div>
          );
        }
      }

      const props = {};

      ReactDOM.render(<ExampleApp {...props} />, document.getElementById('main'))

В вашем коде (если у вас есть jquery):

constructor(){
   this.state = { hideModal = true }
}


hideModal() {
  this.state.hideModal = true
  //i dont recommend, i prefer use the state
   $("#modal").hide()
};

showModal() {
  this.state.hideModal = false
  //i dont recommend, i prefer use the state
  $("#modal").show()
};

render(){
   <button value = "open modal" onClick = {showModal} />
   //div modal
   <div class = {this.state.hideModal ? 'hide' : 'show'}>
      <button value = "close modal" onClick = {hideModal} /> 
   </div>

}

но вы правильно используете ReactModal ?? Я использую базовую загрузку. Есть ли способ закрыть его, когда это модальное окно начальной загрузки?

Yasin Mustafa 26.10.2018 19:15

при нажатии кнопки закрытия необходимо изменить состояние, при этом состояние должно быть связано со стилем или отображением класса: нет

ene_salinas 26.10.2018 19:44

Кнопка закрытия уже работает с загрузочным файлом data-dismiss = "modal". Я хочу закрыть его в обратном вызове; то есть метод jsx

Yasin Mustafa 26.10.2018 19:48

просто удалите атрибут data-dismiss

ene_salinas 26.10.2018 19:52

@YasinMustafa, пожалуйста, проверьте, я редактировал ответ

ene_salinas 26.10.2018 20:01

Я хочу закрыть, нажав кнопку «закрыть» -> уже работает из коробки !!! Я также хочу закрыть обратный вызов с помощью JSX ... это мой вопрос.

Yasin Mustafa 26.10.2018 20:02

добавление класса hide не закрывает его должным образом. Мне нужно сделать что-то вроде jquery $ {# basicExampleModal) .hide () или вызвать data-dismiss в модальном окне ... но я не знаю, как это сделать в JSX

Yasin Mustafa 26.10.2018 20:48

если в вашем проекте есть jquery, сделайте это, $ ("# modal"). hide (), важно то, что метод привязан к конструктору, как в примере выше.

ene_salinas 26.10.2018 21:58

bootstrap имеет функции на основе jquery, поэтому

1. если вы используете здесь jquery, используйте этот

$("#basicExampleModal").modal("hide");

2. Или мы можем использовать data-dismiss = "модальный" для этой кнопки

<button type = "button" class = "btn btn-secondary" data-dismiss = "modal">Close</button>

Вы можете импортировать jquery и вызвать метод Bootstrap modal("hide") ...

import $ from "jquery";

...

hideModal = hideModalInfo => {
  $("#myModal").modal("hide");
};

https://codesandbox.io/s/ykkvl7547j

Другие вопросы по теме