которые отвечает один и тот же компонент
Пример:
Из /tag/tagA
В /tag/tagB
Разве компонент должен перезагружаться самостоятельно? Разве не нужно руками отслеживать условный $route.params.tag_id и при его изменении дергать fetch? Если должен, можно ли как-то отключить?
Вы переходите с одной страницы на другую и удивляетесь что она у вас меняется (перезагружается) ?
Так и есть, как бы это не звучало) Дело в том, что компонент, отвечающий за рендерниг обоих страниц, один и тот же. в Vue в рамках одного компонента изменения в URLах нужно самостоятельно отслеживать (вроде ведь так?) Почему-то думалось что Nuxt работает по этому же принципу (если не брать в расчет SSR)
Nuxt как и сам Vue использует хуки жизненного цикла и не требует ничего отслеживать. Nuxt перерисовывает все компоненты (страницы) лежащие в теге <Nuxt /> вашего шаблона. Соотвественно перерисовка будет. (если верно понял суть вопроса)
Вот цитатка из мануала vue-router Важно отметить, что при переходе от /user/foo к /user/bar будет повторно использован тот же самый экземпляр компонента. Поскольку оба маршрута указывают на один и тот же компонент, этот подход эффективнее, чем уничтожение и повторное создание экземпляра. ... ну и бла-бала ... отслеживайте сами ... мне думалось, что клиентская версия Nuxt будет работать так же но по видимому это не так, или же я чего-то еще не знаю)
Так же работает в шаблонах, в шаблонах не уничтожается, а перерисовывается
смотрите, в папке pages компоненты страниц, на странице допустим выводится товар, это мы в компоненте страницы используем компонент товара, где в props приходят данные из route.query или route.name внутри компонента товара, используйте хук updated чтобы вызвать метод обновляющий данные но чаще да, делают watch за route
в том то и дело что уничтожается и created и mounted хуки компонента запускаются заново
Шаблоны в папке layout (если что) и они не уничтожаются Страницы (pages) уничтожаются
Верно, шаблон остается А компонент в папке pages уничтожается Даже если будет загружен он же В общем, видимо, это стандартное поведение Nuxt? Настройками его не поправить?
Не понимаю кейса. Но можно вложить шаблон в шаблон (через slot) и перерисовывать например уже внутренние части. Например layout магазина включает layout товара, а внутри обновление данных о товаре. Но это крайне глупо даже звучит.
Здорово! Давно не заглядывал сюда :)) ... Как ты? (в личку)
Кейс такой: Что имеется: Есть страница /tags/_tagName На этой странице с помощью fetch грузятся данные, которые зависят от tagName Помимо данных еще есть несколько компонентов-виджетов, которые не зависят от tagName Что происходит: Происходит переход от /tags/tagName1 к /tags/tagName2 Что в результате: 1. компонент /pages/tags/_tagName.vue (где _tagName = tagName1) - уничтожается 2. компонент /pages/tags/_tagName.vue (где _tagName = tagName2) - загружается Проблема: Вместе с уничтожением в п1 уничтожаются и рендерятся заново все компоненты-виджеты
Как выше и говорил, сделать шаблон в шаблоне. Тогда эти виджеты не будут удаляться. https://i.imgur.com/aLgNrmH.png
Спасибо за идею! ++
Все, дочитал мануал до нужного мне места)) за повторную отрисовку того же компонента отвечает параметр "key", который по умолчанию принимает значение $route.fullPath Собственно из-за этого и происходит уничтожение/загрузка одного и того же компонента Если его переопределить, перезагрузки не будет и можно будет отслеживать изменения руками https://nuxtjs.org/docs/2.x/features/nuxt-components#the-nuxt-component
layout структурно выглядит логичней, чем убивать страницу и следить за роутером
Выяснил что не нужно следить за роутом При неизменном key (если переопределить) срабатывает хук updated. А оттуда уже можно дергать fetch Выглядит, на мой взгляд, лучше чем layout внутри layout =)
Не знал, спасибо. Не встречался с таким кейсом, шаблоны всегда были удобны.
Я ошибся хук updated не подходит для мониторинга параметров роута, так как вызывается каждый раз при изменении шаблона компонента
Добавьте для компонента Nuxt,prop keep alive <Nuxt keep-alive/> Тогда все ваши роуты не будут размонтироваться при роутинги,и будут храниться в памяти
Влад, спасибо за совет. Но тут немного другое: keep-alive перед тем как показывать закешированные экземпляры компонентов для ссылок /tag/tagA /tag/tagB /tag/tagC Смонтирует их 3 раза А мне хотелось монтировать только 1й раз, а потом использовать смонтированный экземпляр для всех таких ссылок, меняя только данные. Как я уже писал выше, это возможно с помощью установки свойства key и слежение за $route.params (без переопределения свойства key работать не будет, так как он всегда разный, потому что по умолчанию в key подставляется $route.fullPath) Или, как писал @sonicbhf , вкладывать особый layout-обертку внутрь главного layout
Обсуждают сегодня