Nano Hash - криптовалюты, майнинг, программирование

Как открыть модальное окно подтверждения материализации при удалении чего-либо из базы данных

В настоящее время у меня есть представление, в котором отображаются все документы из базы данных. У каждого есть кнопка, которая запускает удаление документа из базы данных.

В идеале я хотел бы открыть модальное сообщение (используя Materialize), чтобы убедиться, что удаление должно произойти.

Я знаю, что у меня может быть модальное окно для каждого из элементов, но это кажется избыточным и слишком большим для добавления. Я бы хотел, чтобы поток пошел от:

button -> delete

to:

button -> confirm -> delete

Я бы хотел, чтобы это произошло, изменив onClick кнопки, чтобы открыть модальное окно и иметь возможность передавать действие кнопки подтверждения через

Код кнопки в настоящее время выглядит так:

<button
    className="btn"
    onClick={() => {handleClick(category._id);}}
>
Delete
</button>

Текущий обработчик onClick для каждой кнопки следующий:

const handleClick = id => {
  this.props.deleteCategory(id);
};

Я новичок в React / Redux и Materialise, поэтому любая помощь будет принята с благодарностью, и если потребуется дополнительная информация, дайте мне знать :)

Спасибо, Джеймс


Ответы:


1

Хорошо, я сам нашел решение, и, поскольку я не мог найти в Интернете больше информации о том, как это сделать, я подумал, что тоже поделюсь этим решением.

Итак, я сначала установил react-materialize и создал компонент для хранения модального окна и рендеринга модального окна.

Я заменил функцию нажатия кнопки функцией, которая обновляет состояние текущего компонента следующим образом:

const handleClick = category => {
      this.setState({
        categoryClicked: category,
        modalOpen: true
      });
    };

Затем я привязал компонент, содержащий модель, к этому состоянию, используя такие свойства:

<ConfirmDeletion
          onClickYes={null}
          onClickNo={null}
          name={this.state.categoryClicked.name}
          open={this.state.modalOpen}
          actions={[
            <button
              onClick={modalNo}
              className="modal-close waves-effect waves-green btn-flat"
            >
              No
            </button>,
            <button
              onClick={modalYes}
              className="modal-close waves-effect waves-green btn-flat"
            >
              Yes
            </button>
          ]}
        />

Обратите внимание, что действия представляют собой список элементов JSX, которые должны быть кнопками в модальном окне. Я также создал обработчики событий щелчка для обновления состояния (и удаления из базы данных в случае «да») следующим образом:

const modalYes = () => {
      this.props.deleteCategory(this.state.categoryClicked._id);
      this.setState({
        modalOpen: false
      });
    };
const modalNo = () => {
      this.setState({
        modalOpen: false
      });
    };

и просто для полноты, вот компонент, обертывающий модальное окно на случай, если он пригодится кому-либо в будущем:

import React, { Component } from "react";
import { Modal } from "react-materialize";

class ConfirmDeletion extends Component {
  render() {
    const { name, open, actions } = this.props;
    return (
      <Modal
        id="confirmDeletion"
        open={open}
        actions={actions}
        header="Are you sure?"
      >
        <div className="modal-content">
          <p>
            Are you sure you want to do delete '{name}'? It cannot be undone.
          </p>
        </div>
      </Modal>
    );
  }
}

export default ConfirmDeletion;
27.01.2019

2

На основе Материализовать документацию, вы должны выполнить следующие действия:

1- Создайте свою модальную структуру. Например :

<!-- Modal Structure -->
<div id="modal1" class="modal">
  <div class="modal-content">
    <h4>Modal Header</h4>
    <p>A bunch of text</p>
  </div>
  <div class="modal-footer">
    <a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
  </div>
</div>

2- Инициализируйте модальное окно:

document.addEventListener('DOMContentLoaded', function() {
  var elems = document.querySelectorAll('.modal');
  var instances = M.Modal.init(elems, options);
});

Примечание: удалите options, если вы не хотите добавлять модальные параметры. В противном случае это вызывает ошибку.

3- Измените функцию handleClick, чтобы открыть модальное окно:

const handleClick => {
  //var elem = get modal element here
  var instance = M.Modal.getInstance(elem);
  instance.open();
};

4- Наконец, вызовите функцию, когда пользователь щелкнет agree, чтобы удалить категорию. Вы можете добавить кнопку disagree для закрытия модального окна с помощью:

instance.close();
27.01.2019
  • Спасибо, что нашли время, чтобы оставить ответ! Хотя это работает с простым JS и Materialize, я пытаюсь сделать это из приложения React. 27.01.2019
  • Добро пожаловать. Я не очень хорошо знаком с React и написал этот ответ как общее руководство. Я думаю, вы можете найти точное решение с помощью React Materialize: react-materialize.github.io/#/ модальные окна 27.01.2019
  • Еще раз спасибо, я уже искал, чтобы отреагировать-материализоваться, и только что нашел решение. Я отправил это как еще один ответ, если хотите. 27.01.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..