Модальность Bootstrap5 не отображается в React.js после нажатия на кнопку

Я использую bootstrap5 для React. Я успешно установил bootstrap5 в React. Теперь мне нужно показать модальное окно на своей странице, поэтому я добавил кнопку и модальный код на свою страницу.

Ниже приведен код, который я использую для модального окна. Теперь я нажимаю на кнопку, и ничего не работает. Я не получаю свой модальный.

В чем проблема?

import React from "react";

function addEmployee(){
    return(
<div className = "addEmployee">
<button type = "button" className = "btn btn-primary" data-bs-toggle = "modal" data-bs-target = "#staticBackdrop">Add Employee</button>

<div className = "modal fade" id = "staticBackdrop" data-bs-backdrop = "static" data-bs-keyboard = "false" tabIndex = "-1" aria-labelledby = "staticBackdropLabel" aria-hidden = "true">
  <div className = "modal-dialog">
    <div className = "modal-content">
      <div className = "modal-header">
        <h5 className = "modal-title" id = "staticBackdropLabel">Modal title</h5>
        <button type = "button" className = "btn-close" data-bs-dismiss = "modal" aria-label = "Close"></button>
      </div>
      <div className = "modal-body">
        ...
      </div>
      <div className = "modal-footer">
        <button type = "button" className = "btn btn-secondary" data-bs-dismiss = "modal">Close</button>
        <button type = "button" className = "btn btn-primary">Understood</button>
      </div>
    </div>
  </div>
</div>


</div>

    )
}
export default addEmployee;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
8 386
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы посоветовал вам использовать react-bootstrap это намного проще, и javascript был сделан за вас

React-Bootstrap заменяет Bootstrap JavaScript

Каждый компонент был создан с нуля как компонент React, без ненужных зависимостей, таких как jQuery.

Для начала просто установите пакет npm install react-bootstrap bootstrap

посмотрите на этот пример

import { Modal, Button } from "react-bootstrap";
function Example() {
  const [show, setShow] = useState(false);

  const handleClose = () => setShow(false);
  const handleShow = () => setShow(true);

  return (
    <>
      <Button variant = "primary" onClick = {handleShow}>
        Launch demo modal
      </Button>

      <Modal show = {show} onHide = {handleClose}>
        <Modal.Header closeButton>
          <Modal.Title>Modal heading</Modal.Title>
        </Modal.Header>
        <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
        <Modal.Footer>
          <Button variant = "secondary" onClick = {handleClose}>
            Close
          </Button>
          <Button variant = "primary" onClick = {handleClose}>
            Save Changes
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  );
}

render(<Example />);

Блог Гаурава Сингхала @PluralSight

Вы должны использовать контролируемые компоненты, которые используют внутреннее состояние для установки значения и изменить поведение компонента. Библиотеки, такие как jQuery напрямую манипулирует DOM, тогда как компоненты React используют Виртуальный DOM для изменения фактического DOM в браузере. Использование jQuery для изменить поведение вашего компонента возможно. Все равно это приведет к неожиданные результаты и затрудняют отладку. Реагировать на Bootstrap реализует каждый компонент в чистом React, так что вам не о чем беспокоиться о зависимости Bootstrap от jQuery

чтобы проверить их страницу документации (реакции-бутстрап), вот ссылка, по которой вы можете перейти/перейти на реагировать-бутстрап

Я уже установил bootstrap5. Мне нужно удалить это?

user9437856 25.12.2020 04:40

Нет, просто запустите npm install react-bootstrap, React-Bootstrap не зависит от очень точной версии Bootstrap, он не поставляется с включенным CSS. Однако для использования этих компонентов требуется некоторая таблица стилей. так что у вас есть import 'bootstrap/dist/css/bootstrap.min.css'; в ваш файл index.js

IAMSTR 25.12.2020 04:49

Я получил ошибку Строка 5:27: React Hook «useState» вызывается в функции «addEmployee», которая не является ни компонентом функции React, ни пользовательской функцией React Hook. Имена компонентов React должны начинаться с заглавной буквы

user9437856 25.12.2020 06:24

Хорошо. Поэтому я добавил import React, {useEffect, useState} из «реагировать»; и имя функции заглавной буквой. и решил мои проблемы

user9437856 25.12.2020 06:27

Реализовать навигацию на основе react-bootstrap действительно легко, но когда пользовательский дизайн навигации исходит от дизайнера UI / UX, его также сложно реализовать в конкретном проекте реагирования! Есть идеи?

Momin 29.07.2021 15:22

Bootstrap 5 больше не зависит от jQuery, поэтому вам не нужна сторонняя библиотека, такая как react-bootstrap, чтобы использовать Bootstrap в React. Например, вы можете использовать атрибуты data-bs- в разметке или создать функциональный компонент для модального окна Bootstrap с методами для отображения/скрытия модального окна...

function ModalExample() {
    const modalRef = useRef()
    
    const showModal = () => {
        const modalEle = modalRef.current
        const bsModal = new bootstrap.Modal(modalEle, {
            backdrop: 'static',
            keyboard: false
        })
        bsModal.show()
    }
    
    const hideModal = () => {
        const modalEle = modalRef.current
        const bsModal= bootstrap.Modal.getInstance(modalEle)
        bsModal.hide()
    }
    
    return(
        <div className = "addEmployee">
            <button type = "button" className = "btn btn-primary" onClick = {showModal}>Add Employee</button>
            <div className = "modal fade" ref = {modalRef} tabIndex = "-1" >
             <div className = "modal-dialog">
                <div className = "modal-content">
                  <div className = "modal-header">
                    <h5 className = "modal-title" id = "staticBackdropLabel">Modal title</h5>
                    <button type = "button" className = "btn-close" onClick = {hideModal} aria-label = "Close"></button>
                  </div>
                  <div className = "modal-body">
                    ...
                  </div>
                  <div className = "modal-footer">
                    <button type = "button" className = "btn btn-secondary" onClick = {hideModal}>Close</button>
                    <button type = "button" className = "btn btn-primary">Understood</button>
                  </div>
                </div>
              </div>
            </div>
        </div>
    )
}

Демонстрация обоих способов

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

landbit 25.09.2021 15:41

Это должен быть принятый ответ. Работает как шарм.

Mike Aron 19.02.2022 17:29

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