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

Contacts: @RuslanMakarov
Download Telegram
Человек прав. Очень часто для среднего сайта условные PHP и JQuery решают задачи бизнеса проще и много дешевле, даже если у вас есть доступ к хорошим фреймворк фронтендерам.

А если его нет - то можно попасть совсем на неприличные деньги, время. а иногда и бизнес

#webdev
Вы задумывались, почему c fetch-ем нужно два раза ждать?

const response = await fetch(url);
const data = await response.json();


Ведь JSON.parse() - синхронный

Этот факт обычно используется сторонниками axios в свою пользу.

На самом деле, это продуманное поведение, дающее больший и более гибкий функционал.

fetch() резолвит свой промис как только получит все заголовки (HTTP headers), а непосредственно body ждет уже response.json()

Это позволяет, например, получив заголовки не ожидая всего ответа решить - нужен тебе этот ресурс или нет, и за-абортить запрос.

Или определить, какой контент принимать после получения заголовков.

#fetch #axios
Интересный Youtube канал по Vue - LearnVue

Последнее видео - про новый функционал Teleport-а во Vue 3.5

#learning #video
This media is not supported in your browser
VIEW IN TELEGRAM
Различные виды жизненных циклов разработки ПО

(сделайте "Open GIF")

#sd
Ликбез от @vuejs_ru и Artyom Tuchkov

ref и reactive позволяют создать реактивную переменную, но имеют некоторые отличия:

Ref:
- позволяет удобно и просто перезаписать переменную целиком: example.value = 123, при этом сохранив реактивность;
- может быть использован с примитивами (string, number, boolean и т.д.);
- представляет из себя геттер и сеттер в случае с примитивами (без Proxy);
- в случае с объектами просто вызывает reactive и передает обработку ему;
- обязательно имеет контейнер, в котором хранит значение (.value), о котором нельзя забывать.

Reactive:
- работает только с непримитивными значениями (объекты и массивы);
- использует Proxy и глубокую реактивность по умолчанию;
- не может быть просто перезаписан целиком по аналогии с ref, потому что потеряется реактивность;
- удобен для группировки связанных значений в общий объект (чтобы не создавать отдельные независимые переменные для связанного состояния);
- поддерживает ref unwrapping (https://vuejs.org/guide/essentials/reactivity-fundamentals.html#additional-ref-unwrapping-details), а значит в него можно положить другие ref’ы, и они раскроются (не нужно будет писать лишний .value) внутри объекта;
- иногда может быть удобнее в типизации - для него не нужно использовать отдельный тип MaybeRef<T>, как в случае с обычным ref (например, если хочется иметь объект, который может быть как реактивным, так и нет, то типизация и работа с reactive будет в целом выглядеть удобнее).

В общем случае можно просто использовать ref, если это кажется проще, но про reactive тоже полезно помнить, потому что его особенности могут рано или поздно пригодиться.

Полезные ссылки:
1. https://vuejs.org/guide/essentials/reactivity-fundamentals.html

2. https://vuejs.org/guide/extras/reactivity-in-depth.html#how-reactivity-works-in-vue

3. https://stackoverflow.com/questions/61452458/ref-vs-reactive-in-vue-3/65262638#65262638
PWABuilder безо всяких капаситоров и других сложных механизмов может обернуть ваше PWA в webview для Apple Store, Google Play и других магазинов нативных приложений.

Но, соответственно, и функционала меньше.

#pwa
Немного новинок в ваш reset.css

h1, h2, h3, h4, h5, h6 {
text-wrap: balance;
}

p, li {
text-wrap: pretty;
}


Первый делает многострочные заголовки выглядящими более органично (переносы)

Второй - при переносе учитывает семантику слов (не разделит переносом the apple, например)

#css
Что такое дизайн-система?

Дизайн-система — это набор правил и компонентов, которые обеспечивают согласованность и масштабируемость интерфейса. Она включает в себя:

- Цветовые палитры: Основные и дополнительные цвета, используемые в интерфейсе.
- Типографика: Шрифты, размеры, межстрочные интервалы и другие параметры текста.
- Компоненты: Готовые элементы интерфейса (кнопки, формы, карточки и т.д.), которые можно повторно использовать.
- Отступы и размеры: Стандартные значения для отступов, размеров элементов и других пространственных характеристик.
- Использование CSS свойств

Шаги по созданию дизайн-системы

1. Определение базовых стилей:

- Нормализация: Использование нормализатора (например, Normalize.css) для устранения различий в стилях браузеров.
- Переменные: Объявление основных цветов, шрифтов, отступов и других значений в виде CSS переменных.
- Базовые стили: Определение базовых стилей для элементов (например, body, h1, p).

2. Создание компонентов:

- Визуальные компоненты: Создание компонентов, которые отображают пользовательский интерфейс (кнопки, формы, карточки и т.д.).
- Абстрактные компоненты: Создание компонентов, которые не имеют визуального представления, но содержат логику и стили (например, компоненты для работы с цветом, типографикой).

Ключевые моменты для запоминания:

- Постоянство: Придерживайтесь единого стиля во всех компонентах.
- Модульность: Разбивайте дизайн-систему на небольшие, независимые компоненты.
- Гибкость: Создавайте компоненты, которые можно адаптировать под различные сценарии использования.
- Тестирование: Регулярно тестируйте дизайн-систему, чтобы убедиться в ее корректной работе.

Пример:

/* variables.css */
:root {
--primary-color: #007bff;
--font-family: sans-serif;
}

/* BaseButton.vue */
.button {
background-color: var(--primary-color);
padding: 1rem 2rem;
cursor: pointer;
...
}


#webdesign #css
Вышел Deno 2.0 RC, js/ts runtime environment и движок. Развивает проект бывший создатель Node.js Ryan Dahl

- Аналогично Bun, является комбайном, содержащий линтер, тестер, форматер, компайлер и бандлер.
- Отличительная особенность - работа с TS напрямую в рантайме, а не компиляция в js c удалением всех типов как делает Node.js
- Заявляется о полной обратной совместимости с NPM пакетами и Node.js, хотя развивают свой репозиторий typescript-ных библиотек JSR.
- Поддерживает частные npm репозитории.
- Хорошая поддержка Web API
- Интегрировал в себя много утилит типа lodash (как и Bun)
- Можно использовать с Vue проектами
- Имеет свой веб фреймворк, основанный на Preact и со вшитым Tailwind

В общем, далеко не киллер и довольно спорные решения, но конкуренция всегда полезна

Ну и De-no <= No-de если что.

#deno #nodejs #jsr
VueSchool не останавливается в попытках монетизации Vue.js паствы и добавила к себе еще и JavaScript сертификацию

#certification
Вслед за Amazon и Microsoft выкупила на 20 лет атомную электростанцию, чтобы питать ей свои AI ресурсы.

#ai #microsoft
Please open Telegram to view this post
VIEW IN TELEGRAM
3 и 4 октября будет проходить ViteConf 2024
Онлайн и бесплатно
Там бывают интересные доклады

#vite #conf
Миллиардная компания...

#vuejs
Недавние тесты производительности Vapor

Чудес особых не будет - Vue и так быстр. Хотя на больших сложных компонентах преимущество может быть уже ощутимей.

Поэтому не пишите большие сложные компоненты. Разбиение помогает оптимизировать рендеринг.
Признак хорошего Vue.js кодинга №4.

#vapor #benchmark
Не стоит завидовать программистам с родным английским

включить "отмеченный" из "отмеченный";
включить "vue" из "vue";
включить "использоватьМаршрут" из "vue-маршрутизатор";

постоян маршрут = использоватьМаршрут();

консоль.регистрировать(маршрут.параметры.ид);

постоян свойства = определитьСвойства<{
рекомендация: Рекомендация;
}>();

постоян htmlДанные = вычисляемое(() => {
если (!свойства.рекомендация) {
вернуть "";
}
постоян данные = JSON.разобрать(свойства.рекомендация.данные);
вернуть отмеченный.преобразовать(данные.рекомендация) как строка;
});


#humor
Понадобилось как-то стилизовать содержимое v-html (html, преобразованный из markdown) в нескольких компонентах

Прокидывать всё через :deep() было как-то совсем грустно, поэтому придумал такой вариант

// import в main.ts или так один раз:

<style>
@import "@/app/assets/styles/md.css";
</style>


// md.css
.md {
table {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
display: block;
overflow-x: auto;

td,
...


на элементе с v-html в шаблоне ставится class="md"

#css
Первый шажок

Или это уже давно?

#vuejs #compositionapi