207 похожих чатов

Коллеги, просвятите пожалуйста. При переходе по ссылкам (с помощью NuxtLink), за

которые отвечает один и тот же компонент

Пример:
Из /tag/tagA
В /tag/tagB

Разве компонент должен перезагружаться самостоятельно? Разве не нужно руками отслеживать условный $route.params.tag_id и при его изменении дергать fetch? Если должен, можно ли как-то отключить?

21 ответов

33 просмотра

Вы переходите с одной страницы на другую и удивляетесь что она у вас меняется (перезагружается) ?

Pavel-Bobylev Автор вопроса
Evgeniy
Вы переходите с одной страницы на другую и удивляе...

Так и есть, как бы это не звучало) Дело в том, что компонент, отвечающий за рендерниг обоих страниц, один и тот же. в Vue в рамках одного компонента изменения в URLах нужно самостоятельно отслеживать (вроде ведь так?) Почему-то думалось что Nuxt работает по этому же принципу (если не брать в расчет SSR)

Pavel Bobylev
Так и есть, как бы это не звучало) Дело в том, что...

Nuxt как и сам Vue использует хуки жизненного цикла и не требует ничего отслеживать. Nuxt перерисовывает все компоненты (страницы) лежащие в теге <Nuxt /> вашего шаблона. Соотвественно перерисовка будет. (если верно понял суть вопроса)

Pavel-Bobylev Автор вопроса
Evgeniy
Nuxt как и сам Vue использует хуки жизненного цикл...

Вот цитатка из мануала vue-router Важно отметить, что при переходе от /user/foo к /user/bar будет повторно использован тот же самый экземпляр компонента. Поскольку оба маршрута указывают на один и тот же компонент, этот подход эффективнее, чем уничтожение и повторное создание экземпляра. ... ну и бла-бала ... отслеживайте сами ... мне думалось, что клиентская версия Nuxt будет работать так же но по видимому это не так, или же я чего-то еще не знаю)

Pavel Bobylev
Вот цитатка из мануала vue-router Важно отметить,...

Так же работает в шаблонах, в шаблонах не уничтожается, а перерисовывается

смотрите, в папке pages компоненты страниц, на странице допустим выводится товар, это мы в компоненте страницы используем компонент товара, где в props приходят данные из route.query или route.name внутри компонента товара, используйте хук updated чтобы вызвать метод обновляющий данные но чаще да, делают watch за route

Pavel-Bobylev Автор вопроса
Evgeniy
Так же работает в шаблонах, в шаблонах не уничтожа...

в том то и дело что уничтожается и created и mounted хуки компонента запускаются заново

Pavel Bobylev
в том то и дело что уничтожается и created и mount...

Шаблоны в папке layout (если что) и они не уничтожаются Страницы (pages) уничтожаются

Pavel-Bobylev Автор вопроса
Evgeniy
Шаблоны в папке layout (если что) и они не уничтож...

Верно, шаблон остается А компонент в папке pages уничтожается Даже если будет загружен он же В общем, видимо, это стандартное поведение Nuxt? Настройками его не поправить?

Pavel Bobylev
Верно, шаблон остается А компонент в папке pages у...

Не понимаю кейса. Но можно вложить шаблон в шаблон (через slot) и перерисовывать например уже внутренние части. Например layout магазина включает layout товара, а внутри обновление данных о товаре. Но это крайне глупо даже звучит.

Evgeniy
Не понимаю кейса. Но можно вложить шаблон в шаблон...

Здорово! Давно не заглядывал сюда :)) ... Как ты? (в личку)

Pavel-Bobylev Автор вопроса
Evgeniy
Не понимаю кейса. Но можно вложить шаблон в шаблон...

Кейс такой: Что имеется: Есть страница /tags/_tagName На этой странице с помощью fetch грузятся данные, которые зависят от tagName Помимо данных еще есть несколько компонентов-виджетов, которые не зависят от tagName Что происходит: Происходит переход от /tags/tagName1 к /tags/tagName2 Что в результате: 1. компонент /pages/tags/_tagName.vue (где _tagName = tagName1) - уничтожается 2. компонент /pages/tags/_tagName.vue (где _tagName = tagName2) - загружается Проблема: Вместе с уничтожением в п1 уничтожаются и рендерятся заново все компоненты-виджеты

Pavel Bobylev
Кейс такой: Что имеется: Есть страница /tags/_tag...

Как выше и говорил, сделать шаблон в шаблоне. Тогда эти виджеты не будут удаляться. https://i.imgur.com/aLgNrmH.png

Pavel-Bobylev Автор вопроса
Evgeniy
Как выше и говорил, сделать шаблон в шаблоне. Тогд...

Все, дочитал мануал до нужного мне места)) за повторную отрисовку того же компонента отвечает параметр "key", который по умолчанию принимает значение $route.fullPath Собственно из-за этого и происходит уничтожение/загрузка одного и того же компонента Если его переопределить, перезагрузки не будет и можно будет отслеживать изменения руками https://nuxtjs.org/docs/2.x/features/nuxt-components#the-nuxt-component

Pavel Bobylev
Все, дочитал мануал до нужного мне места)) за повт...

layout структурно выглядит логичней, чем убивать страницу и следить за роутером

Pavel-Bobylev Автор вопроса
Evgeniy
layout структурно выглядит логичней, чем убивать с...

Выяснил что не нужно следить за роутом При неизменном key (если переопределить) срабатывает хук updated. А оттуда уже можно дергать fetch Выглядит, на мой взгляд, лучше чем layout внутри layout =)

Pavel Bobylev
Выяснил что не нужно следить за роутом При неизмен...

Не знал, спасибо. Не встречался с таким кейсом, шаблоны всегда были удобны.

Pavel-Bobylev Автор вопроса
Evgeniy
Не знал, спасибо. Не встречался с таким кейсом, ша...

Я ошибся хук updated не подходит для мониторинга параметров роута, так как вызывается каждый раз при изменении шаблона компонента

Pavel Bobylev
Выяснил что не нужно следить за роутом При неизмен...

Добавьте для компонента Nuxt,prop keep alive <Nuxt keep-alive/> Тогда все ваши роуты не будут размонтироваться при роутинги,и будут храниться в памяти

Pavel-Bobylev Автор вопроса
Влад Легуша
Добавьте для компонента Nuxt,prop keep alive <Nux...

Влад, спасибо за совет. Но тут немного другое: keep-alive перед тем как показывать закешированные экземпляры компонентов для ссылок /tag/tagA /tag/tagB /tag/tagC Смонтирует их 3 раза А мне хотелось монтировать только 1й раз, а потом использовать смонтированный экземпляр для всех таких ссылок, меняя только данные. Как я уже писал выше, это возможно с помощью установки свойства key и слежение за $route.params (без переопределения свойства key работать не будет, так как он всегда разный, потому что по умолчанию в key подставляется $route.fullPath) Или, как писал @sonicbhf , вкладывать особый layout-обертку внутрь главного layout

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта