Душный Вуй
745 subscribers
151 photos
5 videos
4 files
351 links
Немного душные, но ламповые заметки о Vue.js
#vuejs #vue #nuxt #vuex #pinia #вью #vapor
Download Telegram
💥Встречаемся на HolyJS💥

7–8 апреля Мы - Msk Vue.JS будем на конференции HolyJS. Едем не только слушать доклады и окультуриваться, но и представлять наше сообщество!

Мы развернем на конференции свой стенд с активностями, в которых можно будет выиграть мерч и просто обсудить Вуячные и ДжаваСкриптовые тренды🙃

На Холи мы будем не одни, а целая выставка JS-сообществ.
С какими еще коммьюнити можно будет повзаимодействовать? Узнай на сайте HolyJS.

Кто тоже собирается на Холи? Давайте планировать встречу!
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый ChatGPT великолепен)
createSharedComposable

Если бы меня спросили лучшие паттерны для освоения во Vue, я бы точно назвал одним из них shared composable. Почему и что это за фрукт такой?

Происхождение
Первое упоминание о shared composable было в RFC Vue посвященному Effect Scope. И там говорится о примере композабла useMouse который слушает перемещения мышки и возвращает это в виде реактивных переменных координат. И вроде логично, что это не самое легковесное действие. А если это нужно множеству компонентов? Да каждый компонент использующий useMouse подписывается на него и это становится уже ощутимо. Тогда почему бы просто не вынести в глобальный STM как Pinia? Отличный вариант, но он будет работать даже когда нет никого кому нужны эти данные. И вот тут на помощь приходит shared composable он умеет как STM шарить данные на множество инстансов, но при этом если никто его не использует, то "стор" уничтожается! При этом сам паттерн универсальный и все что вам нужно это обернуть обычный композабл в createSharedComposable. И да, как только все компоненты использующие useMouse будут размонтированы shared composable тоже отпишется от событий мышки.

Как это работает?

На самом деле весьма не хитрым образом. Оно использует API Effect Scope + счетчик подписчиков, когда подписчиков становится 0 он уничтожает текущий скоуп. Вот и все. А... возможно вам не совсем знакомо что же такое Effect Scope (однажды мой доклад на эту тему уже выложат на YouTube...). А вот поэтому этот паттерн и хорош, он заставляет вас слегка заглянуть поглубже в работу Vue. Я уже приложил ссылку на RFC, где крайне подробно расписано что такое реактивные скоупы и как они работают. Если совсем сократить и упростить, то эффект скоупы это как мешок для реактивности: он запоминает все вызванные watcher-ы и уничтожает их в нужный момент (да-да именно так работает setup в компонентах). А вместо onUnmounted вы можете использовать onScopeDispose.

А чем же так крут этот паттерн еще?
1. Учебный эффект позволяющий лучше понять работу Vue
2. Возможность оптимизации как в примере c useMouse
3. Он позволяет на SPA приложениях спокойно заменить Pinia или другой STM на себя, так как спокойно выполняет обязанности глобального стейт менеджера, только еще и умеет уничтожаться когда никому не нужен (с pinia я видел как люди вручную это дело пытаются зачищать)
4. Advanced DI. По сути созданный композабл это сервис который может жить внутри provide / inject и расшаривать данные и логику как STM, но только на определенной части приложения (я не раз видело как пытаются генерировать это с pinia + id стора)

А какие есть минусы?
- Это не самое SSR Friendly решение
- Этого API нет из коробки, поэтому вам придется либо писать его самим, либо взять из vueuse
- Можно при неаккуратном использовании натворить страшных вещей
- Алгоритм использует простой счетчик, поэтому циклическая зависимость приведет к невозможности уничтожения (если не создать ручной "рубильник")

Итого: классный паттерн имеющий крайне широкие возможности с дополнительным эффектом погружения в мир реактивности Vue, однозначно рекомендую к изучению
Кстати, кстати, кстати!
7-8 апреля будет HolyJS, и я там тоже буду с ребятами из MSK VUE.JS
Так что приходите, будем болтать, обсуждать вуй и душнить 😘💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Тут короче сказали, мол, а мы и старого автора то не знали, капецъ

Надо исправлять, меня зовут Владимир Бандуристов, я тимлидю фронтенд/вуй в билайне и вот уже кажется 3 года веду этот канал, приятно познакомиться =)

Ещё я люблю ваху, у меня есть замечательная собака породы бордер-колли (кстати я написал базу данных этой породы https://bc-db.ru/) и огромное желание нести вуй в массы 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Шо, а вы юзаете ллмки для написания тестов?
👌1💯1
Короче у нас на стенде на Холи была активность в виде Дженги, на каждой палочке которой был написан вопрос по Вую или ТСу.

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

НО! Я был удивлен реакции многих фронтов с реакта, когда они такие "Да ладно! Не может так просто это работать, мне вот говорили что во Вью всё запутано, блин пойду почитаю, ого, какая дока крутая, у нас в реакте такого нет"

Не хватает конечно у Вуя освещенности среди разработчиков на других фреймворках видимо
👌2
А ещё, мне стало оооооооочень интересно узнать как устроена внутренняя кухня Вуя в Озоне когда я услышал "Ну у нас нельзя читать офф доку, потому что у нас есть конвенция, в которой как бы и есть дока, но только то, что можно использовать, поэтому про половину Вуя мы и не знаем"
Типа как так то?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4👌1
В общем телега снесла канал, так что пришлось всеми возможными силами восстанавливать как смог. Зовите друзей Вуюшников, переманивайте Реактеров, уговаривайте Ангулярщиков и приглашайте Свелтистов 😁

Давайте снова вместе вдохнём жизнь в это сообщество 💚

https://t.me/stuffy_vuejs
Please open Telegram to view this post
VIEW IN TELEGRAM
12👌1
Душный Вуй pinned «В общем телега снесла канал, так что пришлось всеми возможными силами восстанавливать как смог. Зовите друзей Вуюшников, переманивайте Реактеров, уговаривайте Ангулярщиков и приглашайте Свелтистов 😁 Давайте снова вместе вдохнём жизнь в это сообщество 💚»
#vue

Кстати одним из вопросов в дженге было "Чем отличается watch от watchEffect", и почему-то мало людей отвечало на него, даже среди разработчиков на Вуе, так что давайте немного теории:

watch
Это такой наблюдатель который позволяет следить за чем либо, и выполнять нужные действия когда вот это первое поменяется, ну например:
import { ref, watch } from 'vue';

const count = ref(0);

watch(count, (newValue, oldValue) => {
console.log(`count изменился с ${oldValue} на ${newValue}`);
});

count.value = 1; // Вывод: "count изменился с 0 на 1"

Какие у него есть нюансы?
— Надо явно указать за чем ты хочешь следить
— Он начинает следить только при первом изменении переменной, если ты ему не укажешь immediate: true
— Могёт тебе показать как старое значение, так и новое
— Есть разные настройки, типа того же immediate, или например возможность указать когда именно должен работать watch, до рендеринга, или после

Причем, так то в watch тоже можно следить на несколькими элементами вот так
watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
console.log(`Count: ${newCount}, Name: ${newName}`);
console.log(`Было: Count: ${oldCount}, Name: ${oldName}`);
});


watchEffect
Тоже наблюдатель, вот только он умеет следить сразу за несколькими переменными вот так:
import { ref, watchEffect } from 'vue';

const count = ref(0);
const multiplier = ref(2);

watchEffect(() => {
console.log(`Результат: ${count.value * multiplier.value}`);
});

// Вывод при инициализации: "Результат: 0"
count.value = 1; // Вывод: "Результат: 2"
multiplier.value = 3; // Вывод: "Результат: 3"


Шо по нюансам?
— Не надо первым аргументом передавать то, за чем ты хочешь следить
— Он прям сразу следит за всем (не нужно указывать immediate).
— Он не покажет тебе старое и новое значение
— Подойдёт когда тебе нужно следить сразу за несколькими переменными
— Тоже есть интересные настройки типа flush для определения когда именно он должен работать
— Для отладки кстати можно заюзать onTrack и onTrigger

Ну и читаем доку конечно жи:
EN: https://vuejs.org/guide/essentials/watchers.html
RU: https://ru.vuejs.org/guide/essentials/watchers
👍271
Спасибо огромное ребятам из Msk Vue.js, каналу Vueist (Денису Чернову) и всем-всем кто помогал восстановить канал после удаления, вы лучшие! ❤️
54🔥9👌4👍2😁2
Forwarded from MSK VUE.JS News
Команда оргов Msk Vue.js легендарно ворвалась на весенний Holy.js ❤️

Мы ломали шаблоны, стереотипы, убеждения реактщиков и дженгу 😅 особо удачливые даже забрали супер эксклюзивный хэндмейд сувенир от нас😂

Было очень классно со всеми увидеться, пообщаться в живую, разогнать за вуй и просто побыть в тусовке!

Скоро увидимся еще) следите за обновлениями в чатике❤️

P.S. Найди ЛЕГЕНДУ на фото🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍7🥰5🫡1
Шо, забирайте свеженький стикерпак про вуй)
Если будут идеи для новых стикеров, пишите в комменты 🙏
Может быть на ближайший митап притащу стикерочков
🔥12👍1