tl, dr;
Импортированный jQuery в вашем приложении отличается от импортированного в объекте окна. Поэтому не распространяется на Bootstrap с помощью метода .carousel()
, который вы используете. Вы можете получить доступ к объекту в окне, используя функцию
const $ = window.$
внутри componentDidMount
. Посмотрите здесь .
Или вы можете импортировать поппер. js и Bootstrap js после jQuery и удалить теги <script>
из index.html
.
Полный (начальный) ответ:
Прежде всего, есть несколько проблем с тем, что у вас есть сейчас:
- ваши попытки были сделаны с помощью
$('.largeModal')
но я не вижу className="largeModal"
в вашем коде. Вы, вероятно, хотели использовать #largeModal
. - , у вас есть несколько случаев
class
в вашей разметке, и React, похоже, не нравится их - вы используете Bootstrap
v4.0.0
. Независимо от основной версии, вы всегда должны go с последней стабильной версией этого основного (текущий 4 будет v4.4.1
, а текущий 3 будет v3.4.1
). - вы загружаете jQuery дважды. Один раз в
index.html
(из cdn) и один раз в вашем компоненте (из пакетов). Хотя загрузка jQuery возможна более одного раза (для того, чтобы разные модули могли использовать разные версии jQuery), есть специальная методика, и вы ее не используете (jQuery работает в режиме совместимости). Я не буду go вдаваться в детали, поскольку (по крайней мере, для текущего вопроса) он вам не понадобится.
Теперь у вас есть два варианта:
a) load jQuery, popper. js и bootstrap, как вы сделали, но затем вы должны также поместить свой скрипт внутрь index.html
, после них (в теге <script>
вместо *) 1044 *) и используйте что-то вроде:
$(document).on('show.bs.modal', '#largeModal', function() {
$('#myCarousel').carousel(0);
})
или ...
b) load jQuery, popper. js и bootstrap s js правильно (с import
, из соответствующих пакетов npm) внутри компонента.
Основная проблема заключается в том, что если вы импортируете только jQuery в свой компонент (помимо загрузки jquery дважды, что само по себе является проблемой), у него не будет расширенных методов на bootstrap. js. И вам, кажется, очень нужен один из них $().carousel()
.
Теперь я понимаю "b)" - не идеальное практическое решение, так как вам не нужно импортировать jQuery, popper и bootstrap в каждый из ваших компонентов в отдельности, решение для этого состоит в том, чтобы назначить внешнюю ссылку на ваш компонент, используя const $ = window.$
внутри componentDidMount
, как указано в tl, dr; .
. Вы можете видеть, как это работает (с import) здесь .
Он также работает извне React (опция "a)" ). Просто убедитесь, что вы загружаете jQuery
, popper.js
и bootstrap
s js, используя только один метод, а не оба. Лично я не рекомендую вариант "a)" (см. Примечание).
Приветствия!
Примечание: React и jQuery - две разные веб-парадигмы и их совместное использование сделает вашу жизнь намного сложнее (как программисту). Вы, вероятно, будете счастливее (и опытнее), выбрав один и придерживаясь его (большинство разработчиков посоветуют вам отказаться от jQuery и использовать React Bootstrap, но выбор остается за вами).