`useHead` does not resolve reactive input on the client
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 74/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Calme
- Stack technique
- nuxtjs, typescript
Piste de recherche
Commencez dans src/runtime/composables/head.ts en inspectant chaque emplacement actif de activeHead.push() et patch() parallèlement au comportement de clientUseHead de @unhead/vue et à sa résolution basée sur watchEffect. Utilisez la reproduction liée pour vérifier que les props réactives sont résolues côté client, mises à jour lorsque leurs refs changent, et n’empêchent plus les balises head d’atteindre le DOM.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐛 The bug
The module's useHead replacement (src/runtime/composables/head.ts) never resolves reactive input. All of its activeHead.push() / patch() sites hand the raw object to unhead, while @unhead/vue's own clientUseHead runs walkResolver(input, VueResolver) inside a watchEffect.
This only bites on the client: @unhead/vue/server creates the head with propResolvers: [VueResolver], so refs resolve inside unhead during SSR. The client head has no prop resolver, so resolution exists only in the composable this module replaces.
Two consequences:
-
Crash — a ref on
innerHTML/textContentof astyle/scriptreaches unhead'snormalizeProps, which JSON-stringifies object values:TypeError: Converting circular structure to JSON --> starting at object with constructor 'ComputedRefImpl' | property 'dep' -> object with constructor 'Dep' --- property 'computed' closes the circle at JSON.stringify (<anonymous>) at normalizeProps (unhead.js:148:28) at normalizeTag (unhead.js:175:15) at normalizeEntryToTags (unhead.js:209:56) at resolveTags (unhead.js:362:16) at _renderDOMHead (unhead.js:183:21)It is thrown inside the debounced
_renderDOMHead, so the whole head render is abandoned: the tag never lands in the DOM, and it can abort router start. -
Silent, for every other prop: the ref object is used instead of its
.value, and since there is nowatchEffect, the tag never updates when the ref changes. Client-side reactive head does not work, though unhead v3 documents it as supported.
@nuxt/ui triggers case 1 out of the box: its colors plugin calls useHead({ style: [{ innerHTML: root, id: 'nuxt-ui-colors' }] }) where root is a computed. Any @nuxtjs/ionic + @nuxt/ui app loses its theme colors style. @nuxtjs/i18n's useLocaleHead() and @nuxtjs/seo hit case 2.
🛠️ To reproduce
https://github.com/Carpediem94/nuxt-ionic-head-repro
🌈 Expected behaviour
Reactive input resolved before being pushed to unhead, and kept in sync as it changes, matching the behaviour of @unhead/vue's useHead.
ℹ️ Additional context
@nuxtjs/ionic 1.0.2, nuxt 4.5.2, @unhead/vue 3.3.1, @nuxt/ui 4.10.0.
Same error class as https://github.com/unjs/unhead/issues/869, but that fix only covered the SSR streaming serializer.
- Langage dominant
- TypeScript
- Étoiles
- 457
- Forks
- 53
- Merge moyen
- 15 h 54 min
- PR mergées (30 j)
- 25
Préparer son environnement
Nous n'avons pas encore vérifié les fichiers d'installation de ce projet. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de nuxt-modules/ionic
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
nuxt-modules/ionic#908 · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 35/100
nuxt-modules/ionic#867 ·
Les mainteneurs répondent en général sous 1 jour
-
bug needs reproduction
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
nuxt-modules/ionic#696 ·
Les mainteneurs répondent en général sous 1 jour
-
IonCardOuvertebug
Difficulté 3/5 1-2 jours Accessibilité débutants 25/100
nuxt-modules/ionic#610 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Wrong tabs navigation behaviorOuvertebug
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
nuxt-modules/ionic#603 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de nuxt-modules/ionic
Issues similaires
-
refactor
Difficulté 2/5 Une demi-journée Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 5 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
OHDSI/Data2Evidence#3450 ·
Les mainteneurs répondent en général sous 2 jours
-
e2e-failure ready-to-code
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
redhat-developer/rhdh-plugin-export-overlays#4011 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
automation missing-model model-sync provider:ofox
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
anomalyco/models.dev#8421 ·
Les mainteneurs répondent en général sous 1 jour
-
SlackAdapter and TelegramAdapter are not assignable to Adapter under exactOptionalPropertyTypesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour