mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 13:45:18 +00:00
fix(nuxt): don't check for layout/page with <ClientOnly>
(#25714)
This commit is contained in:
parent
3c271413f8
commit
fd671a27ea
@ -1,5 +1,6 @@
|
|||||||
import { cloneVNode, createElementBlock, createStaticVNode, defineComponent, getCurrentInstance, h, onMounted, provide, ref } from 'vue'
|
import { cloneVNode, createElementBlock, createStaticVNode, defineComponent, getCurrentInstance, h, onMounted, provide, ref } from 'vue'
|
||||||
import type { ComponentInternalInstance, ComponentOptions, InjectionKey } from 'vue'
|
import type { ComponentInternalInstance, ComponentOptions, InjectionKey } from 'vue'
|
||||||
|
import { useNuxtApp } from '../nuxt'
|
||||||
import { getFragmentHTML } from './utils'
|
import { getFragmentHTML } from './utils'
|
||||||
|
|
||||||
export const clientOnlySymbol: InjectionKey<boolean> = Symbol.for('nuxt:client-only')
|
export const clientOnlySymbol: InjectionKey<boolean> = Symbol.for('nuxt:client-only')
|
||||||
@ -12,6 +13,12 @@ export default defineComponent({
|
|||||||
setup (_, { slots, attrs }) {
|
setup (_, { slots, attrs }) {
|
||||||
const mounted = ref(false)
|
const mounted = ref(false)
|
||||||
onMounted(() => { mounted.value = true })
|
onMounted(() => { mounted.value = true })
|
||||||
|
// Bail out of checking for pages/layouts as they might be included under `<ClientOnly>` 🤷♂️
|
||||||
|
if (import.meta.dev) {
|
||||||
|
const nuxtApp = useNuxtApp()
|
||||||
|
nuxtApp._isNuxtPageUsed = true
|
||||||
|
nuxtApp._isNuxtLayoutUsed = true
|
||||||
|
}
|
||||||
provide(clientOnlySymbol, true)
|
provide(clientOnlySymbol, true)
|
||||||
return (props: any) => {
|
return (props: any) => {
|
||||||
if (mounted.value) { return slots.default?.() }
|
if (mounted.value) { return slots.default?.() }
|
||||||
@ -63,7 +70,7 @@ export function createClientOnly<T extends ComponentOptions> (component: T) {
|
|||||||
// remove existing directives during hydration
|
// remove existing directives during hydration
|
||||||
const directives = extractDirectives(instance)
|
const directives = extractDirectives(instance)
|
||||||
// prevent attrs inheritance since a staticVNode is rendered before hydration
|
// prevent attrs inheritance since a staticVNode is rendered before hydration
|
||||||
for(const key in attrs) {
|
for (const key in attrs) {
|
||||||
delete instance.attrs[key]
|
delete instance.attrs[key]
|
||||||
}
|
}
|
||||||
const mounted$ = ref(false)
|
const mounted$ = ref(false)
|
||||||
|
Loading…
Reference in New Issue
Block a user