•  


`<ServerOnly>` component (to render markup only once) · Issue #27073 · nuxt/nuxt · GitHub
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<ServerOnly> component (to render markup only once) #27073

Open
4 tasks done
septatrix opened this issue May 6, 2024 · 3 comments
Open
4 tasks done

<ServerOnly> component (to render markup only once) #27073

septatrix opened this issue May 6, 2024 · 3 comments

Comments

@septatrix
Copy link

Describe the feature

I would like to add a footer to my page containing the generation timestamp. However, using new Date() does not really work as it is overriden with the current time after hydration. It would be great to have a <ServerOnly> component analog to the existing <ClientOnly> component.

I also tried to put it into defineAppConfig which is for "Public tokens that are determined at build time [...]" but that still leads to the date being hydrated on the client.

Additional information

  • Would you be willing to help implement this feature?
  • Could this feature be implemented as a module?

Final checks

@dsvgl
Copy link

@septatrix
Copy link
Author

This already exists: https://nuxt.com/docs/guide/directory-structure/components#server-components

Using server components would mean that for every slightly different footer I would need a new component. The beauty of the <ClientOnly> component is that it simply accepts markup in its slot instead of requiring a new component for every area where it is used.

@dsvgl
Copy link

Ah, I see. We use https://github.com/freddy38510/vue3-lazy-hydration for such things. So you can wrap your time output in template with:

<
template
>
  <
LazyHydrationWrapper
>
    {{ 
new
 Date
() }}
  </
LazyHydrationWrapper
>
</
template
>

Having no lazy-hydration specific prop on < LazyHydrationWrapper> means it will never hydrate on client side.

There is also really nice nuxt-module to wrap vue3-lazy-hydration: https://github.com/Baroshem/nuxt-lazy-hydrate .
With this, you'd use <NuxtLazyHydrate> instead of <LazyHydrationWrapper> .

There is an open issue to bake this into nuxt. Hopefully it will land some day: #24242

Sign up for free to join this conversation on GitHub . Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants
- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본