Vue-FAQ
944 subscribers
583 photos
93 videos
568 links
Канал сайта https://vue-faq.org
Информация о Vue.js, фронтенд разработке и не только

Contacts: @RuslanMakarov
Download Telegram
DeepSeek R1 была доступна в Cursor AI уже 23 января, оказывается

Надо было в сеттингах просто включить

#ai #cursor
This media is not supported in your browser
VIEW IN TELEGRAM
Идти по жизни надо так

#offtop #video #animals
👍20🐳2
Если показываете через <router-view> страницу с route параметром (продукты, каталоги, пользователей через id), и надо при смене параметра загружать нового, - то есть, следить за изменением параметра, то делать это можно двумя способами.

Через watch:

watch(
() => props.id,
async () => {
userData.value = await fetchUser(to.params.id);
},
{ immediate: true }
);


Через хук роутера onBeforeRouteUpdate:

js 
import { onBeforeRouteUpdate } from 'vue-router'

onBeforeRouteUpdate(async (to, from) => {
if (to.params.id !== from.params.id) {
userData.value = await fetchUser(to.params.id);
}
})


Второй способ дает еще возможность использовать onBeforeRouteLeave, если вдруг надо

#router #tip
🔥19👍7
Потестируйте и покритикуйте (UX, UI, функционал и др.) последний пет-проект

lissa-health.com

Позволяет держать в одном месте свою медицинскую информацию (лабораторные анализы, заключения, произвольные записи) и делать AI аналитику по ним

На сайте есть демо-видео
Также можно загрузить демо-данные

#lissa #pet
👍5🔥2👎1
Технические детали проекта выше

ark-ui в некоторых местах глючит, но как UI библиотека понравилась, буду использовать.

Для графика (chart) модели из TS переделал на классы (без реактивности внутри), стало намного удобней

AI очень помогает делать перевод сайта сразу на нескольких языках одновременно с кодингом

Используются разные LLM для парсинга файлов и аналитических отчетов (подешевле и подороже)

Кнопка справа внизу (FAB) идет как волшебная палочка - в ней разные действия в зависимости от страницы и контекста.
Её задача - сделать удобный UX, чтобы пользователь не бегал по всему экрану пальцем

PWA, variable fonts, JSON-RPC, JSON5

#lissa #pet #arkui
👍3🔥1
Есть строгие мальчики, есть ветренные девочки, и есть TypeScript - трансгендер с пронаунсом "AS"

#ts #lang
😁10
Если вы используете Google Analytics то Google Pagespeed часто ругается сам на себя - gtag.js размером в 100Кб+ снижает показатели сайта.

Можно сделать следующий финт:

 <script async src="https://www.googletagmanager.com/gtag/js?id=G-0SGZMMY7Y4"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'G-0SGZMMY7Y4');
</script>


меняете на

<script>
window.addEventListener('load', function() {
setTimeout(() => {
var script = document.createElement('script');
script.src = 'https://www.googletagmanager.com/gtag/js?id=G-0SGZMMY7Y4';
script.async = true;
document.head.appendChild(script);

window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-0SGZMMY7Y4');
}, 3000);
});
</script>
});


Ушедшие в первые 3 секунды посетители считаться не будут, но они, обычно, и не нужны.

#google #seo
👎11👍2🎄1
Как отключить scroll страницы, когда показываешь модальный диалог через <dialog>?

body:has(dialog[open]) {
overflow: hidden;
}


Размыть фон/overlay?

dialog::backdrop {
backdrop-filter: blur(2px);
}


#css #tip #scroll
🔥19👍4
Media is too big
VIEW IN TELEGRAM
Пятничный оффтоп

Новые власти США рассекречивают документы вивесектария предыдущих правителей

Байденовская администрация в рамках DEI потратила $10 миллионов на создание и изучение трансгендерных мышей, крыс и обезьянок

В частности, $2.5 миллиона ушли на попытки забеременить трансгендерных мышей (отрезав им предварительно гениталии, что-то пересадив и накачав гормонами)

Содом и Гоморра. Помянем бедных испытуемых...

#offtop #pets
🤡8🤯5👍1😭1
Rolldown-Vite готовится

Эван обещал в течение 2-3 месяцев

#rolldown #vite
🔥8
Если делаете два близких приложения (например, клиентский фронтенд и админку) , и хотите расшарить какие-то компоненты и ресурсы, то есть несколько вариантов

1. Монорепозиторий. Оба проекта идут как пакеты и общие пакеты тоже отдельно. На любителя.

2. Выделить общее в отдельный NPM пакет и подключать его. Неудобно возиться с версиями и апдейтом.

3. Делать в одном проекте, настроить на две точки входа. Собирать Vite будет в одну кучу с двумя html файлами входа. Подразумевается, что так удобно работать на одном сайте с двумя мини-приложениями

4. Два отдельных vite.config.ts файла, два html, два App.vue и роутера. В package.json в скриптах прописываете свой Vite конфиг и копирование своего html в index.html. Запускается и собирается каждый как отдельный проект, в коде всё общее.

4. Git submodules. Отдельный проект подключается как поддиректория в твой (общие компоненты).

#tip
👍6👎1
Написал статью про Model Context Protocol

Грубо говоря, это попытка выработать стандартный API для соединения LLM и инструментов - любых приложений, делающих что-то специфичное.

На двух последних проектах окунулся в работу с AI и эта штука (MCP) очень сильно может помочь в разработке приложений, использующих LLM. Чтобы не выклянчивать у чатбота что-то в диалоге, а использовать его для управления специализированными инструментами и получать на порядок более качественный результат.

#ai #article
👍43🔥2
Иногда придумывают действительно что-то полезное...

#gaming
😁11🔥1
Эван тут запустил опрос. Задумал, поди, бэкенд фреймворк написать от скуки.

Хочется сказать: Ю, ты, конечно, красавчек. Но, во-первых, js на бэке - это говно. Во-вторых, брать лучшие практики из Ларавеля, это как брать уроки танцев у стриптизерши из припортового бара. И, в-третьих, - дай нам Rolldown, Vapor и пофикси, наконец, этот гребаный Volar, а потом делай что хочешь.

P.S. Год назад на бэке отошел от любых фреймворков, абсолютно счастлив и жалею, что не сделал этого раньше

#backend #evanyou #laravel
💩16😁9🤡5👎1
В экспериментальных версиях браузеров уже появляется реализация Temporal - официальной замены Date в JavaScript

const dateTime = Temporal.Now.plainDateTimeISO();
console.log(dateTime); // e.g.: 2025-01-22T11:46:36.144

// 1851222399924 is our timestamp
const launch = Temporal.Instant.fromEpochMilliseconds(1851222399924);
const now = Temporal.Now.instant();
const duration = now.until(launch, { smallestUnit: "hour" });
console.log(`It will be ${duration.toLocaleString("en-US")} until the launch`);
// "It will be 31,600 hr until the launch" <- @js-temporal/polyfill
// "It will be PT31600H until the launch" <- Firefox Nightly


Уже доступен полифилл - @js-temporal/polyfill

#js #date
🔥14👍3