#vue #vueform
Там VueForm теперь OpenSource 🎉
https://vueform.com/news/20231020-vueform-is-now-open-source
Там VueForm теперь OpenSource 🎉
https://vueform.com/news/20231020-vueform-is-now-open-source
Vueform
Vueform is Now Open-Source 🔥 | Vueform | Open-Source Form Framework for Vue
As of today, Vueform is open-source and available on GitHub under MIT license, including all its elements and features. This doesn't mean we're stepping back. On the contrary, we're aiming for a wider reach and inviting everyone to get involved.
Forwarded from Black_Yuzia
Там https://t.me/vue_updates/370
vue 3.4.0 релизнулся.
Идите читайте changelog 👀
Чуть позже сделаю удобнее 🤔
vue 3.4.0 релизнулся.
Идите читайте changelog 👀
Чуть позже сделаю удобнее 🤔
Telegram
Vue Updates
Vue 3
v3.4.0
#vue #vue3
Please refer to CHANGELOG.md for details.
v3.4.0
#vue #vue3
Please refer to CHANGELOG.md for details.
Forwarded from Vue-FAQ
DOM manipulation performance - React, Svelte and Vue comparison
https://krausest.github.io/js-framework-benchmark
#benchmark #react #svelte #vue
https://krausest.github.io/js-framework-benchmark
#benchmark #react #svelte #vue
Forwarded from Душный Вуй
#vue #критика
Автор: @Indy660
Ссылка: https://github.com/Indy660/player_with_my_favorite_music
GH Pages: https://indy660.github.io/player_with_my_favorite_music/#tab=all&track=0
Автор: @Indy660
Ссылка: https://github.com/Indy660/player_with_my_favorite_music
GH Pages: https://indy660.github.io/player_with_my_favorite_music/#tab=all&track=0
GitHub
GitHub - Indy660/player_with_my_favorite_music: Playlist
Playlist . Contribute to Indy660/player_with_my_favorite_music development by creating an account on GitHub.
#vue #критика
Автор: @sultondev
Ссылка: https://www.npmjs.com/package/vue-hover-effect
Ссылка на борду: https://volta.net/sultondev/vue-hover-effect
Автор: @sultondev
Ссылка: https://www.npmjs.com/package/vue-hover-effect
Ссылка на борду: https://volta.net/sultondev/vue-hover-effect
npm
npm: vue-hover-effect
[Demo](https://vue-hover-effect.vercel.app/). Latest version: 0.0.9-alpha.7, last published: 3 months ago. Start using vue-hover-effect in your project by running `npm i vue-hover-effect`. There are no other projects in the npm registry using vue-hover-effect.
#vue #критика
Продолжаем обозревать ваши проекты, на очереди у нас целое радио)
Автор: @AlAstroMoody
Код: https://github.com/AlAstroMoody/radio
Приложение: https://alastromoody.github.io/radio/
Продолжаем обозревать ваши проекты, на очереди у нас целое радио)
Автор: @AlAstroMoody
Код: https://github.com/AlAstroMoody/radio
Приложение: https://alastromoody.github.io/radio/
GitHub
GitHub - AlAstroMoody/radio: PWA, Интернет-радио, Feature-Sliced Design
PWA, Интернет-радио, Feature-Sliced Design. Contribute to AlAstroMoody/radio development by creating an account on GitHub.
#vue #критика
Продолжаем смотреть ваши проектики, на очереди у нас кнопочка поделиться в соц. сетях с гигантским количеством вариантов👀
Автор: @webistomin
Код: https://github.com/webistomin/vue-socials
Сайт: https://vue-socials.vercel.app/
Продолжаем смотреть ваши проектики, на очереди у нас кнопочка поделиться в соц. сетях с гигантским количеством вариантов
Автор: @webistomin
Код: https://github.com/webistomin/vue-socials
Сайт: https://vue-socials.vercel.app/
Please open Telegram to view this post
VIEW IN TELEGRAM
#vue #критика
Продолжаем, на очереди у нас приложенька для подсчета стоимости вашей работы)
Автор: @z1kYz3r
Web: https://time2money.zq.lt
Chrome extension:
https://chromewebstore.google.com/detail/time-to-money-calculator/hmlelnagnhidpaifchocofnbikmpipmb
Github: https://github.com/zikju/time-to-money-calculator
Продолжаем, на очереди у нас приложенька для подсчета стоимости вашей работы)
Автор: @z1kYz3r
Web: https://time2money.zq.lt
Chrome extension:
https://chromewebstore.google.com/detail/time-to-money-calculator/hmlelnagnhidpaifchocofnbikmpipmb
Github: https://github.com/zikju/time-to-money-calculator
time2money.zq.lt
Time to Money Calculator
This handy application makes it easy for any freelancer to calculate his or her total earnings based on the number of hours and minutes worked.
#vue #критика
UI для мультиплеерного мода M&B:Bannerlord
Без адаптива (не нужен)
Авторизация через Steam/Xbox/Epic (чтобы увидеть все разделы)
Много unit-тестов
Автор: @zohan333
Web: https://c-rpg.eu/
https://c-rpg.eu/strategus/ - WIP режим глобальной карты
GitHub: https://github.com/namidaka/crpg
UI для мультиплеерного мода M&B:Bannerlord
Без адаптива (не нужен)
Авторизация через Steam/Xbox/Epic (чтобы увидеть все разделы)
Много unit-тестов
Автор: @zohan333
Web: https://c-rpg.eu/
https://c-rpg.eu/strategus/ - WIP режим глобальной карты
GitHub: https://github.com/namidaka/crpg
В общем телега снесла канал, так что пришлось всеми возможными силами восстанавливать как смог. Зовите друзей Вуюшников, переманивайте Реактеров, уговаривайте Ангулярщиков и приглашайте Свелтистов 😁
Давайте снова вместе вдохнём жизнь в это сообщество💚
https://t.me/stuffy_vuejs
Давайте снова вместе вдохнём жизнь в это сообщество
https://t.me/stuffy_vuejs
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Душный Вуй
Немного душные, но ламповые заметки о Vue.js
#vuejs #vue #nuxt #vuex #pinia #вью #vapor
#vuejs #vue #nuxt #vuex #pinia #вью #vapor
#vue
Кстати одним из вопросов в дженге было "Чем отличается watch от watchEffect", и почему-то мало людей отвечало на него, даже среди разработчиков на Вуе, так что давайте немного теории:
watch
Это такой наблюдатель который позволяет следить за чем либо, и выполнять нужные действия когда вот это первое поменяется, ну например:
Какие у него есть нюансы?
— Надо явно указать за чем ты хочешь следить
— Он начинает следить только при первом изменении переменной, если ты ему не укажешь
— Могёт тебе показать как старое значение, так и новое
— Есть разные настройки, типа того же
Причем, так то в watch тоже можно следить на несколькими элементами вот так
watchEffect
Тоже наблюдатель, вот только он умеет следить сразу за несколькими переменными вот так:
Шо по нюансам?
— Не надо первым аргументом передавать то, за чем ты хочешь следить
— Он прям сразу следит за всем (не нужно указывать
— Он не покажет тебе старое и новое значение
— Подойдёт когда тебе нужно следить сразу за несколькими переменными
— Тоже есть интересные настройки типа
— Для отладки кстати можно заюзать
Ну и читаем доку конечно жи:
EN: https://vuejs.org/guide/essentials/watchers.html
RU: https://ru.vuejs.org/guide/essentials/watchers
Кстати одним из вопросов в дженге было "Чем отличается 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
#vue
Иногда пишешь компонент, прокидываешь в него всякие id, class, style и прочие data-*, а они куда-то теряются. А всё потому, что Vue по умолчанию не лепит эти атрибуты на все элементы подряд. Но есть нюансы 👇
Что вообще происходит?
Vue берёт все атрибуты, которые ты НЕ объявил явно в props, и добавляет их к корневому элементу твоего компонента.
👉 В итоге на кнопке окажутся и class="big red", и id="super-btn". Удобно? Удобно.
А если у меня кастомная разметка?
Если ты хочешь, чтобы атрибуты не просто свалились куда попало, а чтобы ты сам решил — кому их отдать. Тогда тебе пригодится юзать
Иногда ты вообще не хочешь, чтобы Vue сам что-то передавал. Например, если ты хочешь полный контроль. Тогда пишешь:
👉 В этом случае все атрибуты пойдут только на кнопку, а не на обёртку. Особенно полезно, если тебе важно, чтобы стили/события применялись именно к интерактивному элементу.
Важные моменты
— Всё, что не prop — это $attrs
— По умолчанию всё это идёт в корневой элемент
— Хочешь контроль — юзай
—
— Если атрибут совпадает с именем prop — он туда не попадёт
Ну и конечно читаем доку:
EN: https://vuejs.org/guide/components/attrs.html
RU: https://ru.vuejs.org/guide/components/attrs
Иногда пишешь компонент, прокидываешь в него всякие id, class, style и прочие data-*, а они куда-то теряются. А всё потому, что Vue по умолчанию не лепит эти атрибуты на все элементы подряд. Но есть нюансы 👇
Что вообще происходит?
Vue берёт все атрибуты, которые ты НЕ объявил явно в props, и добавляет их к корневому элементу твоего компонента.
<MyButton class="big red" id="super-btn" />
<!-- Внутри MyButton.vue -->
<template>
<button>Нажми</button>
</template>
👉 В итоге на кнопке окажутся и class="big red", и id="super-btn". Удобно? Удобно.
А если у меня кастомная разметка?
Если ты хочешь, чтобы атрибуты не просто свалились куда попало, а чтобы ты сам решил — кому их отдать. Тогда тебе пригодится юзать
v-bind="$attrs"
.<template>
<div>
<button>Жмек-с</buitton>
<button v-bind="$attrs">Жмак</button>
</div>
</template>
Иногда ты вообще не хочешь, чтобы Vue сам что-то передавал. Например, если ты хочешь полный контроль. Тогда пишешь:
<template>
<div class="wrapper">
<button v-bind="$attrs">Кнопка</button>
</div>
</template>
<script setup>
defineOptions({
inheritAttrs: false
})
</script>
👉 В этом случае все атрибуты пойдут только на кнопку, а не на обёртку. Особенно полезно, если тебе важно, чтобы стили/события применялись именно к интерактивному элементу.
Важные моменты
— Всё, что не prop — это $attrs
— По умолчанию всё это идёт в корневой элемент
— Хочешь контроль — юзай
inheritAttrs: false
и v-bind="$attrs"
—
$attrs
можно использовать и в setup
, и в template
— Если атрибут совпадает с именем prop — он туда не попадёт
Ну и конечно читаем доку:
EN: https://vuejs.org/guide/components/attrs.html
RU: https://ru.vuejs.org/guide/components/attrs
Кстате, если шо у нас есть чатик тут
https://t.me/stuffy_vuejs_chat
https://t.me/stuffy_vuejs_chat
Telegram
Чат Душного Вуя
Чат о Vue.js, Nuxt.js, Pinia, Vuex, Vite и т.д.
#vuejs #vue #nuxt #vuex #pinia #вью
#vuejs #vue #nuxt #vuex #pinia #вью
#vue
KeepAlive во Vue 3 — теперь с бонусами 🎁
Типичный кейс:
У тебя табы или роуты, и ты хочешь, чтобы при переключении вкладки не терялись вводимые данные, скролл и т.д.
А если я хочу контролировать, что именно кешируется?
У
А ещё можно использовать
Что нового во Vue 3?
Раньше было просто: компонент либо кешировался, либо нет. А теперь у нас больше гибкости:
Новое поведение: onActivated и onDeactivated
Когда компонент попадает в KeepAlive, Vue не вызывает unmounted, как обычно. Вместо этого срабатывают хуки:
Это значит, что ты можешь спокойно ставить на паузу таймеры, отписываться от чего-то тяжёлого, останавливать анимации и т.д.
Когда не надо использовать?
— Если компонент дешёвый (рендерится быстро)
— Если тебе не важно сохранять состояние
— Если ты хочешь, чтобы он пересоздавался при каждом появлении
TL;DR:
— KeepAlive сохраняет компоненты в памяти
— Не вызывает
— Можно фильтровать компоненты через include / exclude
— Есть max — ограничитель памяти
— Работает только с одним дочерним компонентом (или <component>)
Ну и дока
RU: https://ru.vuejs.org/guide/built-ins/keep-alive
EN: https://vuejs.org/guide/built-ins/keep-alive.html
KeepAlive во Vue 3 — теперь с бонусами 🎁
KeepAlive
— это специальный компонент-обёртка, который позволяет кешировать компонент, когда он удаляется из DOM. То есть Vue его не уничтожает, а аккуратно откладывает "на потом". Это как display: none, только с сохранением всех данных, реактивности и внутреннего состояния.Типичный кейс:
У тебя табы или роуты, и ты хочешь, чтобы при переключении вкладки не терялись вводимые данные, скролл и т.д.
<KeepAlive>
<component :is="currentTabComponent" />
</KeepAlive>
А если я хочу контролировать, что именно кешируется?
У
KeepAlive
в Vue 2.1.0+ есть пропсы include
и exclude
, туда можно вписать имена компонентов:<!-- строка, разделённая запятыми -->
<KeepAlive include="a,b">
<component :is="view" />
</KeepAlive>
<!-- регулярное выражение (используйте `v-bind`) -->
<KeepAlive :include="/a|b/">
<component :is="view" />
</KeepAlive>
<!-- массив (используйте `v-bind`) -->
<KeepAlive :include="['a', 'b']">
<component :is="view" />
</KeepAlive>
А ещё можно использовать
max
, чтобы указать, сколько компонентов максимум можно держать в памяти.<KeepAlive :max="2">
<component :is="currentTabComponent" />
</KeepAlive>
Что нового во Vue 3?
Раньше было просто: компонент либо кешировался, либо нет. А теперь у нас больше гибкости:
Новое поведение: onActivated и onDeactivated
Когда компонент попадает в KeepAlive, Vue не вызывает unmounted, как обычно. Вместо этого срабатывают хуки:
onActivated(() => {
console.log('Я снова в деле!');
});
onDeactivated(() => {
console.log('Пошёл отдыхать');
});
Это значит, что ты можешь спокойно ставить на паузу таймеры, отписываться от чего-то тяжёлого, останавливать анимации и т.д.
Когда не надо использовать?
— Если компонент дешёвый (рендерится быстро)
— Если тебе не важно сохранять состояние
— Если ты хочешь, чтобы он пересоздавался при каждом появлении
TL;DR:
— KeepAlive сохраняет компоненты в памяти
— Не вызывает
unmounted
, используй onActivated
и onDeactivated
— Можно фильтровать компоненты через include / exclude
— Есть max — ограничитель памяти
— Работает только с одним дочерним компонентом (или <component>)
Ну и дока
RU: https://ru.vuejs.org/guide/built-ins/keep-alive
EN: https://vuejs.org/guide/built-ins/keep-alive.html
#vue
Сегодня поболтаем про
Что делают?
Когда применять?
— Когда у тебя компонент рендерится слишком часто, и ты не понимаешь почему
— Когда ты хочешь отладить производительность
— Когда ты ковыряешь чужой (или забытый свой) код, и надо понять, откуда ноги растут
Пример использования
👉 Когда ты жмёшь кнопку, в консоль вылетит:
Что приходит в этих хуках?
Vue кидает тебе объект с такими полями:
А что полезного можно делать?
🔍 Диагностика “лишних” перерендеров
Допустим, у тебя компонент рендерится при изменении чего-то, что вообще не используется в шаблоне.
Пихаем
🧪 Логирование зависимости
Можно даже накинуть табличку с
🎛 Анализ производительности
Можно повесить счётчик, сколько раз компонент триггерился. Если там десятки вызовов при одном клике — уже подозрительно.
TL;DR:
—
—
— Полезно для дебага и оптимизации
— Использовать только в dev-режиме
Ну и дока конечно тут:
https://ru.vuejs.org/api/composition-api-lifecycle.html#onrendertracked
Сегодня поболтаем про
onRenderTracked()
и onRenderTriggered()
— штуки, которые редко используют, но зря! 🔍Что делают?
onRenderTracked
— показывает, за чем Vue следит во время рендера (что "отслеживает").onRenderTriggered
— показывает, что изменилось и вызвало повторный рендер.Когда применять?
— Когда у тебя компонент рендерится слишком часто, и ты не понимаешь почему
— Когда ты хочешь отладить производительность
— Когда ты ковыряешь чужой (или забытый свой) код, и надо понять, откуда ноги растут
Пример использования
<script setup>
import { ref, onRenderTracked, onRenderTriggered } from 'vue';
const count = ref(0);
const name = ref('Vue');
onRenderTracked((e) => {
console.log('[tracked]', e);
});
onRenderTriggered((e) => {
console.log('[triggered]', e);
});
</script>
<template>
<div>
<p>Счётчик: {{ count }}</p>
<p>Имя: {{ name }}</p>
<button @click="count++">+1</button>
</div>
</template>
👉 Когда ты жмёшь кнопку, в консоль вылетит:
[triggered] { target: ..., key: "count", type: "set" }
Что приходит в этих хуках?
Vue кидает тебе объект с такими полями:
effect
— ссылка на реактивный эффект (рендер)target
— объект, за которым следили/который сработал (ref, reactive и т.д.)key
— конкретное поле (count, name, и т.п.)type
— тип действия (get, set, add, delete, clear)oldValue
и newValue
(в triggered) — что поменялосьА что полезного можно делать?
🔍 Диагностика “лишних” перерендеров
Допустим, у тебя компонент рендерится при изменении чего-то, что вообще не используется в шаблоне.
Пихаем
onRenderTriggered
, запускаем консоль и проверяем — если key
не совпадает ни с чем в template, возможно, надо рефакторить.🧪 Логирование зависимости
Можно даже накинуть табличку с
console.table
, чтобы красиво смотреть за чем следит твой компонент.onRenderTracked((e) => {
console.table({
key: e.key,
type: e.type,
target: e.target
});
});
🎛 Анализ производительности
Можно повесить счётчик, сколько раз компонент триггерился. Если там десятки вызовов при одном клике — уже подозрительно.
TL;DR:
—
onRenderTracked
= смотри, за чем следим—
onRenderTriggered
= смотри, что изменилось и вызвало ререндер— Полезно для дебага и оптимизации
— Использовать только в dev-режиме
Ну и дока конечно тут:
https://ru.vuejs.org/api/composition-api-lifecycle.html#onrendertracked