useHydrated()
vike-react/vike-vue/vike-solidYou need
vike-react/vike-vue/vike-solidto be able to useuseHydrated(). If you don't usevike-{react,vue,solid}then see Withoutvike-{react,vue,solid}.
The useHydrated() hook returns whether the page has already been hydrated.
On the server, it always returns false. On the client, it returns false on first render and true after hydration completes.
Common use case: disable interactive elements until hydration completes.
The difference with
pageContext.isClientSide && !pageContext.isHydration(which returns the same value) is thatuseHydrated()triggers a re-render after the component hydrates.
React
import { useHydrated } from 'vike-react/useHydrated'
function SomeComponent() {
const hydrated = useHydrated()
return (
<button type="button" disabled={!hydrated} onClick={doSomething}>
Click me
</button>
)
}Vue
<template>
<button type="button" :disabled="!hydrated" @click="doSomething">Click me</button>
</template>
<script setup>
import { useHydrated } from 'vike-vue/useHydrated'
const hydrated = useHydrated()
</script><template>
<button type="button" :disabled="!hydrated" @click="doSomething">
Click me
</button>
</template>
<script setup lang="ts">
import { useHydrated } from 'vike-vue/useHydrated'
const hydrated = useHydrated()
</script>Solid
import { useHydrated } from 'vike-solid/useHydrated'
function SomeComponent() {
const hydrated = useHydrated()
return (
<button type="button" disabled={!hydrated()} onClick={doSomething}>
Click me
</button>
)
}Without vike-{react,vue,solid}
If you don't use a UI framework Vike extension vike-react/vike-vue/vike-solid, you can implement useHydrated() yourself.
See the source code: