#javascript #reactjs #bootstrap-4 #bootstrap-modal #react-bootstrap
#javascript #reactjs #bootstrap-4 #загрузочный модал #react-bootstrap
Вопрос:
Я работаю над проектом React, и по какой-то причине я решил использовать пакет bootstrap, а не пакет react-bootstrap, и теперь я столкнулся с этой проблемой:
В загрузочном модале есть тег Link (компонент из пакета react-router-dom), который ведет себя как тег ‘a’, но без перезагрузки страницы. Итак, теперь, когда я нажимаю на эту ссылку, она выполняет свою работу, но, к сожалению, модал останется показанным.
<Link to="/home">Home</Link>
Я попытался добавить к нему свойство data-dismiss=»modal», и это действительно сработало — оно закроет модал после нажатия на ссылку, но не выполнит свою реальную работу, которая заключается в изменении URL…
<Link to="/home" data-dismiss="modal">Home</Link>
Я также попробовал эти два варианта, и они сгенерировали такое же поведение:
это:
<Link to="Home">
Home
<a data-dismiss="modal"></a>
</Link>
и это:
<a data-dismiss="modal">
<Link to="/home">Home</Link>
</a>
Я нашел решения с использованием jQuery, но использовать jQuery в моем коде только для решения этой проблемы не очень хорошая идея, особенно потому, что я использую React.
Я также избегаю того факта, что я должен использовать пакет react-bootstrap вместо этого, потому что мне придется изменить много кода в моем проекте.
Ответ №1:
Следующие снимки экрана взяты из фактического кода начальной загрузки. В частности modal.js
Вы можете обратиться сюда, если хотите увидеть это сами: https://github.com/twbs/bootstrap/blob/b083c9639fd9012e5cba57d6c4088d43b3c3e57d/js/src/modal.js
Итак, суть в том, что ваш проект, вероятно, использует jQuery из-за того, что
Я попытался добавить к нему свойство data-dismiss=»modal», и оно действительно сработало
Так что просто продолжайте и используйте jQuery, если вам действительно нужно продолжать использовать исходный загрузчик. Следующее возможное решение — написать свой собственный скрипт для закрытия модала.
Bootstrap использует эти элементы для модального:
Фон
<div class="modal-backdrop fade show"></div>
и модальный элемент
<div class="modal fade show" id="exampleModalLive" tabindex="-1" aria-labelledby="exampleModalLiveLabel" style="display: block; padding-right: 17px;" aria-modal="true" role="dialog">
Вам нужно будет найти способ (1) удалить show
класс в модальном элементе и изменить его свойство отображения CSS, (2) удалить элемент модального фона при закрытии. Оба из которых вам, вероятно, придется мутировать в DOM напрямую, если только вам не нужно преобразовать реализацию в компоненты на основе React — что уже сделали react-bootstrap или reactstrap.
Комментарии:
1. Да, хорошо, я, вероятно, напишу немного jQuery, потому что он все равно работает в моем приложении. Позже я преобразоваю пакет начальной загрузки в bootstrap-package. Большое спасибо!