При добавлении события show.bs.modal в модальном окне начальной загрузки внутри useEffect в React оно срабатывает дважды, даже если оно добавляется только один раз. Таким образом, 'onshown' регистрируется дважды, а 'mount' регистрируется только один раз.
Вы можете воспроизвести его с помощью следующего кода, чтобы было ясно, что строгий режим отключен, и это единственный код в проекте React.
Компонент React:
import {useEffect, useRef} from "react";
export default function TestModal() {
const modalRef = useRef();
useEffect(() => {
console.log("mount");
const modelReference = modalRef.current;
function onShown() {
console.log("onshown")
}
if (modelReference) {
console.log("add event listener");
modelReference.addEventListener("shown.bs.modal", onShown);
}
return () => {
if (modelReference) {
modelReference.removeEventListener("shown.bs.modal", onShown);
}
};
}, []);
return (
{
console.log("click");
}}>
Open modal
Preview
Close
)
}
index.html:
Data Collection
You need to enable JavaScript to run this app.
Когда вы берете тот же пример и делаете его в простом файле html, он работает должным образом, а 'onshown' регистрируется только один раз.
html-sample:
Title
Open modal
Preview
Close
const modal = document.getElementById('previewFileModal');
async function onShown() {
console.log("onshown")
}
modal.addEventListener("shown.bs.modal", onShown);
Подробнее здесь: https://stackoverflow.com/questions/798 ... ring-twice
Модальное событие Bootstrap onshown срабатывает дважды ⇐ Javascript
Форум по Javascript
-
Anonymous
1771068976
Anonymous
При добавлении события show.bs.modal в модальном окне начальной загрузки внутри useEffect в React оно срабатывает [b]дважды[/b], даже если оно добавляется только [b]один раз[/b]. Таким образом, 'onshown' регистрируется дважды, а 'mount' регистрируется только один раз.
Вы можете воспроизвести его с помощью следующего кода, чтобы было ясно, что строгий режим отключен, и это единственный код в проекте React.
[b]Компонент React[/b]:
import {useEffect, useRef} from "react";
export default function TestModal() {
const modalRef = useRef();
useEffect(() => {
console.log("mount");
const modelReference = modalRef.current;
function onShown() {
console.log("onshown")
}
if (modelReference) {
console.log("add event listener");
modelReference.addEventListener("shown.bs.modal", onShown);
}
return () => {
if (modelReference) {
modelReference.removeEventListener("shown.bs.modal", onShown);
}
};
}, []);
return (
{
console.log("click");
}}>
Open modal
Preview
Close
)
}
[b]index.html[/b]:
Data Collection
You need to enable JavaScript to run this app.
Когда вы берете тот же пример и делаете его в простом файле [b]html[/b], он работает должным образом, а 'onshown' регистрируется только один раз.
[b]html-sample[/b]:
Title
Open modal
Preview
Close
const modal = document.getElementById('previewFileModal');
async function onShown() {
console.log("onshown")
}
modal.addEventListener("shown.bs.modal", onShown);
Подробнее здесь: [url]https://stackoverflow.com/questions/79889273/bootstrap-modal-onshown-event-firing-twice[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия