Nuxt3: несоответствие класса гидратации на ssr при асинхронной загрузке NuxtLinks

В компоненте заголовка я хочу загружать ссылки асинхронно. Мне было интересно, почему на начальной (отрисованной на сервере) странице NuxtLinks не было активного класса, поэтому я нашел это сообщение об ошибке в консоли при доступе к localhost:3000/blog

[Vue warn]: Hydration class mismatch on <a href=​"/​blog" class data-v-49fb23b8>​Blog​</a>​ 
  - rendered on server: class = ""
  - expected on client: class = "router-link-active router-link-exact-active"
  Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.
  You should fix the source of the mismatch. 
  at <RouterLink ref=fn to = "blog" activeClass=undefined  ... > 
  at <NuxtLink to = "blog" > 
  at <Header> 
  at <Default ref=Ref< undefined > > 
  at <LayoutLoader key = "default" layoutProps= {ref: RefImpl} name = "default" > 
  at <NuxtLayoutProvider layoutProps= {ref: RefImpl} key = "default" name = "default"  ... > 
  at <NuxtLayout> 
  at <App key=4 > 
  at <NuxtRoot>

Вот как выглядит компонент <Header>:

Я использую setTimeout для имитации асинхронного вызова, который хочу сделать.

<template>
    <ul>
      <li v-for = "link in links" :key = "link.id">
        <NuxtLink :to = "link.slug" >
          {{ link.name }}
        </NuxtLink>
      </li>
    </ul>
</template>

<script setup>
  const {data: links} = await useAsyncData(() => {
    return new Promise((resolve, reject) => {
      setTimeout(
        () => resolve(
          [
            { id: 1, slug: 'blog', name: 'Blog' }, 
            { id: 2, slug: 'about', name: 'About' }
          ]
      ), 500)
    });
  });
</script>

<style scoped> 
.router-link-active {
  color: red;
}
</style>

Судя по тому, что я прочитал, асинхронный вызов уже должен ожидаться на стороне сервера, и, следовательно, активный класс должен быть установлен уже на сервере (из https://nuxt.com/docs/getting-started/data-fetching #саспенс).

Судя по сообщениям об ошибках, в части, отображаемой на сервере, отсутствует активный класс?

Я не уверен, что делаю неправильно, я все еще немного отвык от Nuxt3 и Vue.

Возможно, я мог бы попробовать использовать пользовательскую выборку (https://nuxt.com/docs/guide/recipes/custom-usefetch), но я не уверен, почему она не должна работать и с useAsyncData()

Я проверил ваш код и не вижу никаких предупреждений со своей стороны.

Reagan 12.07.2024 21:50

Установлен ли на вашем компьютере класс router-link-active при обновлении, например? на localhost:3000/blog? Редактировать: спасибо за отзыв, тогда я проверю, что я делаю на своей странице не так!

steve_oc 13.07.2024 08:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С помощью комментария Рейгана я узнал, что на моей странице нужно что-то сделать.

Воспроизвести это было немного сложнее, поскольку ошибка возникала только при новом запуске сервера разработки Nuxt и последующем обновлении.

Для меня это исправило то, что теперь я использовал ref() там, где он мне действительно был нужен. Казалось, это каким-то образом вызвало конфликт.

Другие вопросы по теме