Skip to content

Commit 332f5c7

Browse files
committed
fix: fix lazy preloader removal error in react in vue
fixes #8149
1 parent 9752771 commit 332f5c7

3 files changed

Lines changed: 35 additions & 6 deletions

File tree

src/react/swiper-slide.mjs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,28 @@ const SwiperSlide = forwardRef(
8585
data-swiper-zoom={typeof zoom === 'number' ? zoom : undefined}
8686
>
8787
{renderChildren()}
88-
{lazy && !lazyLoaded && <div className="swiper-lazy-preloader" />}
88+
{lazy && !lazyLoaded && (
89+
<div
90+
className="swiper-lazy-preloader"
91+
ref={(node) => {
92+
if (node) node.lazyPreloaderManaged = true;
93+
}}
94+
/>
95+
)}
8996
</div>
9097
</SwiperSlideContext.Provider>
9198
)}
9299
{!zoom && (
93100
<SwiperSlideContext.Provider value={slideData}>
94101
{renderChildren()}
95-
{lazy && !lazyLoaded && <div className="swiper-lazy-preloader" />}
102+
{lazy && !lazyLoaded && (
103+
<div
104+
className="swiper-lazy-preloader"
105+
ref={(node) => {
106+
if (node) node.lazyPreloaderManaged = true;
107+
}}
108+
/>
109+
)}
96110
</SwiperSlideContext.Provider>
97111
)}
98112
</Tag>

src/shared/process-lazy-preloader.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ export const processLazyPreloader = (swiper, imageEl) => {
1212
requestAnimationFrame(() => {
1313
if (slideEl.shadowRoot) {
1414
lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
15-
if (lazyEl) lazyEl.remove();
15+
if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();
1616
}
1717
});
1818
}
1919
}
20-
if (lazyEl) lazyEl.remove();
20+
// Skip removal if managed by React/Vue component
21+
if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();
2122
}
2223
};
2324

src/vue/swiper-slide.mjs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,26 @@ const SwiperSlide = {
104104
},
105105
[
106106
slots.default && slots.default(slideData.value),
107-
props.lazy && !lazyLoaded.value && h('div', { class: 'swiper-lazy-preloader' }),
107+
props.lazy &&
108+
!lazyLoaded.value &&
109+
h('div', {
110+
class: 'swiper-lazy-preloader',
111+
onVnodeMounted: (vnode) => {
112+
if (vnode.el) vnode.el.lazyPreloaderManaged = true;
113+
},
114+
}),
108115
],
109116
)
110117
: [
111118
slots.default && slots.default(slideData.value),
112-
props.lazy && !lazyLoaded.value && h('div', { class: 'swiper-lazy-preloader' }),
119+
props.lazy &&
120+
!lazyLoaded.value &&
121+
h('div', {
122+
class: 'swiper-lazy-preloader',
123+
onVnodeMounted: (vnode) => {
124+
if (vnode.el) vnode.el.lazyPreloaderManaged = true;
125+
},
126+
}),
113127
],
114128
);
115129
};

0 commit comments

Comments
 (0)