diff --git a/packages/react/test-app/Pages/WhenVisible.jsx b/packages/react/test-app/Pages/WhenVisible.jsx
index 776765590..e0dbb3719 100644
--- a/packages/react/test-app/Pages/WhenVisible.jsx
+++ b/packages/react/test-app/Pages/WhenVisible.jsx
@@ -23,5 +23,9 @@ export default () => (
+
+
+ Loading fourth one...
}>
+
>
)
diff --git a/packages/svelte/test-app/Pages/WhenVisible.svelte b/packages/svelte/test-app/Pages/WhenVisible.svelte
index 8396f2e13..1e192b8dd 100644
--- a/packages/svelte/test-app/Pages/WhenVisible.svelte
+++ b/packages/svelte/test-app/Pages/WhenVisible.svelte
@@ -31,3 +31,11 @@
Third one is visible!
+
+
+
+
+ Loading fourth one...
+
+
+
diff --git a/packages/vue3/src/whenVisible.ts b/packages/vue3/src/whenVisible.ts
index 7c63faa38..ee1f5bff3 100644
--- a/packages/vue3/src/whenVisible.ts
+++ b/packages/vue3/src/whenVisible.ts
@@ -94,10 +94,10 @@ export default defineComponent({
els.push(h(this.$props.as))
}
- if (this.loaded) {
- els.push(this.$slots.default())
- } else {
+ if (!this.loaded) {
els.push(this.$slots.fallback ? this.$slots.fallback() : null)
+ } else if (this.$slots.default) {
+ els.push(this.$slots.default())
}
return els
diff --git a/packages/vue3/test-app/Pages/WhenVisible.vue b/packages/vue3/test-app/Pages/WhenVisible.vue
index 4861a3cb3..c5482dbf5 100644
--- a/packages/vue3/test-app/Pages/WhenVisible.vue
+++ b/packages/vue3/test-app/Pages/WhenVisible.vue
@@ -32,4 +32,12 @@ import { WhenVisible } from '@inertiajs/vue3'
Third one is visible!
+
+
+
+
+ Loading fourth one...
+
+
+
diff --git a/tests/when-visible.spec.ts b/tests/when-visible.spec.ts
index 083112a79..565b0c6c1 100644
--- a/tests/when-visible.spec.ts
+++ b/tests/when-visible.spec.ts
@@ -16,7 +16,9 @@ test('it will wait to fire the reload until element is visible', async ({ page }
await page.evaluate(() => (window as any).scrollTo(0, 5000))
await expect(page.getByText('Loading first one...')).toBeVisible()
+ await expect(page.getByText('First one is visible!')).not.toBeVisible()
await page.waitForResponse(page.url())
+ await expect(page.getByText('Loading first one...')).not.toBeVisible()
await expect(page.getByText('First one is visible!')).toBeVisible()
// Scroll back up and then back down, make sure we don't re-request
@@ -35,13 +37,17 @@ test('it will wait to fire the reload until element is visible', async ({ page }
// This one has a buffer of 1000
await page.evaluate(() => (window as any).scrollTo(0, 9000))
await expect(page.getByText('Loading second one...')).toBeVisible()
+ await expect(page.getByText('Second one is visible!')).not.toBeVisible()
await page.waitForResponse(page.url())
+ await expect(page.getByText('Loading second one...')).not.toBeVisible()
await expect(page.getByText('Second one is visible!')).toBeVisible()
// This one should trigger every time it's visible
await page.evaluate(() => (window as any).scrollTo(0, 15_000))
await expect(page.getByText('Loading third one...')).toBeVisible()
+ await expect(page.getByText('Third one is visible!')).not.toBeVisible()
await page.waitForResponse(page.url())
+ await expect(page.getByText('Loading third one...')).not.toBeVisible()
await expect(page.getByText('Third one is visible!')).toBeVisible()
// Now scroll up and down to re-trigger it
@@ -58,4 +64,9 @@ test('it will wait to fire the reload until element is visible', async ({ page }
await page.evaluate(() => (window as any).scrollTo(0, 15_000))
await expect(page.getByText('Third one is visible!')).toBeVisible()
await page.waitForResponse(page.url())
+
+ await page.evaluate(() => (window as any).scrollTo(0, 20_000))
+ await expect(page.getByText('Loading fourth one...')).toBeVisible()
+ await page.waitForResponse(page.url())
+ await expect(page.getByText('Loading fourth one...')).not.toBeVisible()
})