Ликбез от @vuejs_ru и
Ref:
- позволяет удобно и просто перезаписать переменную целиком:
- может быть использован с примитивами (string, number, boolean и т.д.);
- представляет из себя геттер и сеттер в случае с примитивами (без Proxy);
- в случае с объектами просто вызывает
- обязательно имеет контейнер, в котором хранит значение (.value), о котором нельзя забывать.
Reactive:
- работает только с непримитивными значениями (объекты и массивы);
- использует Proxy и глубокую реактивность по умолчанию;
- не может быть просто перезаписан целиком по аналогии с
- удобен для группировки связанных значений в общий объект (чтобы не создавать отдельные независимые переменные для связанного состояния);
- поддерживает ref unwrapping (https://vuejs.org/guide/essentials/reactivity-fundamentals.html#additional-ref-unwrapping-details), а значит в него можно положить другие ref’ы, и они раскроются (не нужно будет писать лишний .value) внутри объекта;
- иногда может быть удобнее в типизации - для него не нужно использовать отдельный тип
В общем случае можно просто использовать
Полезные ссылки:
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
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
vuejs.org
Vue.js
Vue.js - The Progressive JavaScript Framework
PWABuilder безо всяких капаситоров и других сложных механизмов может обернуть ваше
Но, соответственно, и функционала меньше.
#pwa
PWA
в webview
для Apple Store
, Google Play
и других магазинов нативных приложений.Но, соответственно, и функционала меньше.
#pwa
Эван тут взбудоражиол всех в X:
> Some big news next week... 🥁 Что будет?
> Some big news next week... 🥁 Что будет?
Anonymous Poll
22%
Релиз Rolldown
20%
Экспериментальное добавление Rolldown в Vite
11%
Vapor
13%
Vue 4
7%
Options API deprecation
12%
Кто-то покупает Vue
9%
Эван ожидает рождения третьего ребенка
6%
Другое
Что такое дизайн-система?
- Цветовые палитры: Основные и дополнительные цвета, используемые в интерфейсе.
- Типографика: Шрифты, размеры, межстрочные интервалы и другие параметры текста.
- Компоненты: Готовые элементы интерфейса (кнопки, формы, карточки и т.д.), которые можно повторно использовать.
- Отступы и размеры: Стандартные значения для отступов, размеров элементов и других пространственных характеристик.
- Использование CSS свойств
Шаги по созданию дизайн-системы
1. Определение базовых стилей:
- Нормализация: Использование нормализатора (например, Normalize.css) для устранения различий в стилях браузеров.
- Переменные: Объявление основных цветов, шрифтов, отступов и других значений в виде CSS переменных.
- Базовые стили: Определение базовых стилей для элементов (например, body, h1, p).
2. Создание компонентов:
- Визуальные компоненты: Создание компонентов, которые отображают пользовательский интерфейс (кнопки, формы, карточки и т.д.).
- Абстрактные компоненты: Создание компонентов, которые не имеют визуального представления, но содержат логику и стили (например, компоненты для работы с цветом, типографикой).
Ключевые моменты для запоминания:
- Постоянство: Придерживайтесь единого стиля во всех компонентах.
- Модульность: Разбивайте дизайн-систему на небольшие, независимые компоненты.
- Гибкость: Создавайте компоненты, которые можно адаптировать под различные сценарии использования.
- Тестирование: Регулярно тестируйте дизайн-систему, чтобы убедиться в ее корректной работе.
Пример:
#webdesign #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
- Аналогично
- Отличительная особенность - работа с
- Заявляется о полной обратной совместимости с
- Поддерживает частные
- Хорошая поддержка
- Интегрировал в себя много утилит типа
- Можно использовать с
- Имеет свой веб фреймворк, основанный на
В общем, далеко не киллер и довольно спорные решения, но конкуренция всегда полезна
Ну и
#deno #nodejs #jsr
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
Deno
Deno, the next-generation JavaScript runtime
Deno features improved security, performance, and developer experience compared to its predecessor. It's a great time to upgrade your Node.js project to run on Deno.
VueSchool
не останавливается в попытках монетизации Vue.js
паствы и добавила к себе еще и JavaScript
сертификацию#certification
Вслед за Amazon и
#ai #microsoft
Microsoft
выкупила на 20 лет атомную электростанцию, чтобы питать ей свои AI
ресурсы.#ai #microsoft
3 и 4 октября будет проходить ViteConf 2024
Онлайн и бесплатно
Там бывают интересные доклады
#vite #conf
Онлайн и бесплатно
Там бывают интересные доклады
#vite #conf
viteconf.amsterdam
The Official in-person Vite Conference organised in collaboration with the Creator of Vite, Evan You and Vite Core Team!
Недавние тесты производительности
Чудес особых не будет -
Поэтому не пишите большие сложные компоненты. Разбиение помогает оптимизировать рендеринг.
Признак хорошего Vue.js кодинга №4.
#vapor #benchmark
Vapor
Чудес особых не будет -
Vue
и так быстр. Хотя на больших сложных компонентах преимущество может быть уже ощутимей.Поэтому не пишите большие сложные компоненты. Разбиение помогает оптимизировать рендеринг.
Признак хорошего Vue.js кодинга №4.
#vapor #benchmark
Не стоит завидовать программистам с родным английским
#humor
включить "отмеченный" из "отмеченный";
включить "vue" из "vue";
включить "использоватьМаршрут" из "vue-маршрутизатор";
постоян маршрут = использоватьМаршрут();
консоль.регистрировать(маршрут.параметры.ид);
постоян свойства = определитьСвойства<{
рекомендация: Рекомендация;
}>();
постоян htmlДанные = вычисляемое(() => {
если (!свойства.рекомендация) {
вернуть "";
}
постоян данные = JSON.разобрать(свойства.рекомендация.данные);
вернуть отмеченный.преобразовать(данные.рекомендация) как строка;
});
#humor
Понадобилось как-то стилизовать содержимое
Прокидывать всё через
на элементе с
#css
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
Новость, о которой на прошлой неделе говорил Эван, и которую не угадал никто (ну и я её явно в опрос не догадался поставить)
Эван создал компанию, которая будет делать "an open-source, high-performance, and unified development toolchain for the JavaScript ecosystem" (ну то бишь как сейчас
Это очень хорошая новость. Я давно говорил, в том числе Эвану, что
В итоге, Эван оформил права на
Разработчики, работающие над
То, что Эван никому не отдаст
Кстати, посмотрите внимательно на сайт voidzero.dev. Это пример того, что может
Ну и название зачетное.
#evanyou #vitepress #rolldown #voidzero #oxc
Эван создал компанию, которая будет делать "an open-source, high-performance, and unified development toolchain for the JavaScript ecosystem" (ну то бишь как сейчас
bun
или deno
только без js
движка), и в первом раунде поднял $4.6 млн за нее (то есть продал инвесторам процентов 10-20 её акций за эту сумму)Это очень хорошая новость. Я давно говорил, в том числе Эвану, что
Vue
давно перерос уровень любительского опен-сорса, и ему нужен бэкап в форме бизнеса. Потому что смотреть на депрессивные каминг-ауты Энтони, или нытье Джонсона про mucho trabajo poco dinero, или заброшенный по той же причине Vapor
совсем не комильфо.В итоге, Эван оформил права на
Oxc
и Rolldown
на созданную компанию VoidZero Inc
и продал ее часть инвесторам. Vue
экосистема не затронута вообще. То есть, работа Эвана над этими новыми проектами за прошлый год оценена рынком миллионов так в 20. Нормально.Разработчики, работающие над
Vue
или Vite
, скорей всего будут сотрудниками этой новой компании и будут получать там зарплату за свою работу - это и называется бэкап бизнесом.То, что Эван никому не отдаст
Vue
, можно было не сомневаться. Его пост настоятельно рекомендуется к прочтению.Кстати, посмотрите внимательно на сайт voidzero.dev. Это пример того, что может
VitePress
. Ну и название зачетное.
#evanyou #vitepress #rolldown #voidzero #oxc
void(0)
Announcing VoidZero - Next Generation Toolchain for JavaScript
We are building the next generation of JavaScript tooling
This media is not supported in your browser
VIEW IN TELEGRAM
А вы заценили анимацию и вообще весь дизайн сайта voidzero.dev?
Мастерство не пропьешь...
#webdesign #evanyou #voidzero
Мастерство не пропьешь...
#webdesign #evanyou #voidzero
Начинается онлайн конференция ViteConf
Через пятнадцать минут выступает Эван, должен рассказать о
#conf #vite
Через пятнадцать минут выступает Эван, должен рассказать о
Voidzero
#conf #vite
viteconf.amsterdam
The Official in-person Vite Conference organised in collaboration with the Creator of Vite, Evan You and Vite Core Team!
При верстке кроме
Например, малоиспользуемое
Еще одно
Вместе они могут облегчить верстку, когда, например, в трехблочном макете надо боковую колонку засунуть в мобильном виде между двумя блоками основной. Если используется лэйаут
#css
flex
и grid
есть и другие варианты создания адаптивного шаблонаНапример, малоиспользуемое
display: contents
как бы "удаляет" контейнер, и все его потомки переходят на уровень выше.Еще одно
CSS
правило order
"меняет" порядок потомковВместе они могут облегчить верстку, когда, например, в трехблочном макете надо боковую колонку засунуть в мобильном виде между двумя блоками основной. Если используется лэйаут
flex
, то можно обойтись без смены на grid
#css