Если вам надо выводить атрибут на элементе по условию, то
Это касается только нестандартных
#tip
null
выведет просто имя атрибута, а пустая строка (falsy
) запретит его вывод вообще.Это касается только нестандартных
HTML
атрибутов (типа class
, disabled)
<template>
<div :someProp="hasSomeProp ? 'disabled' : null"></div>
<!-- Выведет <div someProp></div> -->
</template>
<template>
<div :someProp="hasSomeProp ? 'disabled' : ''"></div>
<!-- Выведет <div></div> -->
</template>
#tip
Всё сущее состоит из противоположных начал, которые, будучи едиными по своей природе, находятся в борьбе друг с другом: день-ночь, горячее-холодное, добро-зло, SPA - бэк API.
Эта борьба, движимая диалектическим законом единства и борьбы противоположностей, служит источником развития, трансформируя количественное накопленные знания в качественно новые формы.
Поэтому SSR, серверные компоненты и прочие гермафродитные порождения LGBT фронтенда не имеют будущего и обречены на разлагающее зловонное вымирание.
#esse #ssr
Эта борьба, движимая диалектическим законом единства и борьбы противоположностей, служит источником развития, трансформируя количественное накопленные знания в качественно новые формы.
Поэтому SSR, серверные компоненты и прочие гермафродитные порождения LGBT фронтенда не имеют будущего и обречены на разлагающее зловонное вымирание.
#esse #ssr
Во
Основной плюс - возможность указывать дефолтные значения более человеческим способом:
Как это делалось ранее (и можно делать сейчас):
Деструктуризация пропсов - это осколки невзлетевшего
По сути деструктуризация пропсов это просто макрос, скрывающий под собой обычную работу с пропсами:
Минусы:
- Деструктурированные пропсы могут быть случайно переданы в функцию, что приведет к потере реактивности
- Пропсы перестают быть явными (становятся неотличимы от обычных переменных)
- Путаница для новичков с магией компилятора
Решение:
Не забывать работать с ними как с
#props #reactivity
Vue 3
вышла Reactive Props Destructure
- деструктуризация пропсовОсновной плюс - возможность указывать дефолтные значения более человеческим способом:
const { count = 0, msg = "hello" } = defineProps<{
count?: number;
message?: string;
}>();
const double = computed(() => count * 2);
Как это делалось ранее (и можно делать сейчас):
const props = withDefaults(
defineProps<{
count?: number;
msg?: string;
}>(),
{
count: 0,
msg: "hello",
}
);
Деструктуризация пропсов - это осколки невзлетевшего
Reactivity Transform
По сути деструктуризация пропсов это просто макрос, скрывающий под собой обычную работу с пропсами:
// на входе
const { count } = defineProps(["count"]);
console.log(count);
// на выходе компилятора
const __props = defineProps(["count"]);
console.log(__props.count);
Минусы:
- Деструктурированные пропсы могут быть случайно переданы в функцию, что приведет к потере реактивности
- Пропсы перестают быть явными (становятся неотличимы от обычных переменных)
- Путаница для новичков с магией компилятора
Решение:
Не забывать работать с ними как с
props.X
либо не использовать деструктуризацию.#props #reactivity
Сижу я как-то без работы уже какое-то время. И тут подруга договорилась об интервью. Поехали мы с ней, - в Москве, где-то в пределах бульварного кольца особнячок такой старинный. Поднимаемся по лестнице, на третий этаж. Там она пошла куда-то, я жду.
Тут из кабинета меня зовут. Вхожу - там большая такая комната, длинная, длинный стол, и за ним работники сидят офисные - молодые, все прям белые воротнички, в костюмчиках. Но не на компьютерах работают, а бумаги какие-то перекладывают.
Я присел на стул. Тут подходит из дальнего угла тоже относительно молодой человек - типа, техлид. Ну, начал я ему свои регалии по резюме рассказывать. Он послушал совсем немного, а потом говорит:
- Это всё хорошо. А вы работали с магазином Тьян-Ми?
Я так понял это софт какой-то, но название не расслышал с первого раза. Переспрашиваю:
- Что?
Он опять:
- Магазин Тьян-Ми
А я опять не расслышал, - эти работники по все комнате шуршат своими бумагами и канцелярскими приборами, а техлид этот на расстоянии. Неудобно, но все же переспрашиваю:
- Какой магазин?
- Тьян-Ми.
И видно, что уже раздраженно ответил. Я говорю:
- Нет.
Он:
- Ну а о чем тут еще говорить?
Поворачивается и уходит обратно в дальний конец комнаты.
И я такой, не понимаю - это что, всё? Оглядываюсь на работников - а они кто сочувственно смотрит, кто глаза опустил.
Я секунд 20 подождал, потом встал, выхожу, и на лестнице еще оборачиваюсь - может я не так понял и меня обратно позовут?
Не позвали...
Вот такой сон сегодня приснился. И настолько реалистичный и красочный, прям до сих пор под впечатлением.
Что за магазин Тьян-Ми?
Что-то на Наксте?
#offtop
Тут из кабинета меня зовут. Вхожу - там большая такая комната, длинная, длинный стол, и за ним работники сидят офисные - молодые, все прям белые воротнички, в костюмчиках. Но не на компьютерах работают, а бумаги какие-то перекладывают.
Я присел на стул. Тут подходит из дальнего угла тоже относительно молодой человек - типа, техлид. Ну, начал я ему свои регалии по резюме рассказывать. Он послушал совсем немного, а потом говорит:
- Это всё хорошо. А вы работали с магазином Тьян-Ми?
Я так понял это софт какой-то, но название не расслышал с первого раза. Переспрашиваю:
- Что?
Он опять:
- Магазин Тьян-Ми
А я опять не расслышал, - эти работники по все комнате шуршат своими бумагами и канцелярскими приборами, а техлид этот на расстоянии. Неудобно, но все же переспрашиваю:
- Какой магазин?
- Тьян-Ми.
И видно, что уже раздраженно ответил. Я говорю:
- Нет.
Он:
- Ну а о чем тут еще говорить?
Поворачивается и уходит обратно в дальний конец комнаты.
И я такой, не понимаю - это что, всё? Оглядываюсь на работников - а они кто сочувственно смотрит, кто глаза опустил.
Я секунд 20 подождал, потом встал, выхожу, и на лестнице еще оборачиваюсь - может я не так понял и меня обратно позовут?
Не позвали...
Вот такой сон сегодня приснился. И настолько реалистичный и красочный, прям до сих пор под впечатлением.
Что за магазин Тьян-Ми?
Что-то на Наксте?
#offtop
После выхода
Недавно кто-то в чате пожаловался, что после апдейта
#vuejs #volar
Vue 3.5.3
все тесты в ее экосистеме стали "зелеными", что уже как бы хороший знак.Недавно кто-то в чате пожаловался, что после апдейта
Vue
у него сломались импорты по имени директории (index.ts
не находился). Я тоже словил этот баг - это очередной закос Volar
, решается перезагрузкой окна.#vuejs #volar
Cходу смог применить вроде бы чисто
При реализации глобального прелоадера
Там компоненты, которые могут влиять на прелоадер, регистрируются со своими
Очень показательно в плане того, чтобы увидеть, для чего эта функция может быть полезна.
Также очевидно
#useid
SSR
-ную новую штуку от Vue 3.5
- useId()При реализации глобального прелоадера
Там компоненты, которые могут влиять на прелоадер, регистрируются со своими
id
, который должен быть уникален для компонента. Раньше был вариант с uuid
.Очень показательно в плане того, чтобы увидеть, для чего эта функция может быть полезна.
Также очевидно
useId()
много будет использоваться для доступности (a11y
), о чем и написано в документации.#useid
Vue FAQ
Архитектурные решения | Vue FAQ
Vue FAQ - information about Vue.js and frontend development in general
На днях РКН снова сильно обеспокоил своими блокировками. Потратил опять время, поставил VPN Hiddify
На сервере инсталяционный скрипт ставил кучу барахла минут 15, убил мои
Пришлось всё переставлять и под него делать отдельный сервер. В итоге заработало без особых бубнов, выглядит солидно. Но клиент на
Разработка иранцев и китайцев.
Кстати,
P.S. Будете выбирать местоположение своего сервера, учитывайте свои предпочтения по рекламе в `Youtube`. Сделаете в Германии - будете слушать рекламу на немецком. В Италии - на итальянском. В РФ рекламу не пускали.
#vpn
На сервере инсталяционный скрипт ставил кучу барахла минут 15, убил мои
Nginx
и MySQL
, потому что ставит свои. Хорошо хоть сервер не прод. )Пришлось всё переставлять и под него делать отдельный сервер. В итоге заработало без особых бубнов, выглядит солидно. Но клиент на
Windows
иногда подвисает. Тогда лучше его убивать через Task manager
Разработка иранцев и китайцев.
Кстати,
CPU
и памяти он жрет на клиенте несравнимо меньше Outline
P.S. Будете выбирать местоположение своего сервера, учитывайте свои предпочтения по рекламе в `Youtube`. Сделаете в Германии - будете слушать рекламу на немецком. В Италии - на итальянском. В РФ рекламу не пускали.
#vpn
Hiddify
Home - Hiddify
The proxy manager platform.
Еще один интересный API client - Yaak с девизом: «Offline-First and Bloat-Free»
На днях вышел в
Выглядит приятно, минималистично, но достаточно полно.
Альтернативы:
-
-
Первое
Есть еще один популярный "як" в семействе API клиентов - httpYac - CLI версия и расширение для
#api #rest #yaak #tauri #hoppscotch
На днях вышел в
Open source
. Написан на Tauri
и React
Выглядит приятно, минималистично, но достаточно полно.
Альтернативы:
-
Postman
- слишком жирный и перегруженный, требует интернета для работы-
Hoppscotch
- слишком часто не может подсоединиться к внешним API
(CORS или блокировка его прокси)Первое
Tauri
приложение, что я попробовал. К сожалению, реклама не то же самое, что жизнь - дистрибутив 40Мб, в развернутом виде - 120Мб. Не сильно меньше Electron
-a, хотя не должен содержать в себе JS
движок. Есть еще один популярный "як" в семействе API клиентов - httpYac - CLI версия и расширение для
VS Code
#api #rest #yaak #tauri #hoppscotch
yaak.app
Yaak – The API client for modern developers
A fast, offline, and Git friendly app for HTTP, GraphQL, WebSockets, SSE, and
gRPC.
gRPC.
Вышла первая бета шестого
Из нового только Environment API
Пятый вышел 10 месяцев назад, и брейкингов там было выше крыши. Видимо затишье перед интеграцией
#vite
Vite
Из нового только Environment API
Пятый вышел 10 месяцев назад, и брейкингов там было выше крыши. Видимо затишье перед интеграцией
Rolldown
#vite
18 качественных отличий
- отсутствие легаси-абсурда: @change во вью - это реальный change, а не input, как в реакте, мимикрирующий под change
- отсутствие stale closure и всех связанных с ним проблем
- автоматический трекинг зависимостей, нет костылей типа useCallback
- удобные хелперы из коробки (привет либам clsx и classnames)
- удобный DSL, а не стремный JSX
- нет useEffect и миллиарда статей и докладов на тему “вы неправильно используете useEffect”
- нет проблем с воображением, когда добавляют новые фичи - useImperativeHandle и dangerouslySetInnerHTML
- есть сахар для работы с формами - v-model
- есть слоты
- нет костыльного стриктмода, который, прости хоспаде, твой код запускает дважды, чтобы тебе было приятнее работать избавить тебя от багов
- нет monkey-patching’а нативных console и fetch
- нет ререндеров на любой чих
- нет 50 вложенных контекстов в руте приложения
- нет прекрасного forwardRef
- есть нормальная система плагинов
- есть реактивность для Map/Set из коробки
- есть нормальная мутабельность без сотни копий всего подряд
- есть nextTick, не надо костылить с flushSync
#react #vuejs
Vue
от React
от Artyom Tuchkov- отсутствие легаси-абсурда: @change во вью - это реальный change, а не input, как в реакте, мимикрирующий под change
- отсутствие stale closure и всех связанных с ним проблем
- автоматический трекинг зависимостей, нет костылей типа useCallback
- удобные хелперы из коробки (привет либам clsx и classnames)
- удобный DSL, а не стремный JSX
- нет useEffect и миллиарда статей и докладов на тему “вы неправильно используете useEffect”
- нет проблем с воображением, когда добавляют новые фичи - useImperativeHandle и dangerouslySetInnerHTML
- есть сахар для работы с формами - v-model
- есть слоты
- нет костыльного стриктмода, который, прости хоспаде, твой код запускает дважды, чтобы тебе было приятнее работать избавить тебя от багов
- нет monkey-patching’а нативных console и fetch
- нет ререндеров на любой чих
- нет 50 вложенных контекстов в руте приложения
- нет прекрасного forwardRef
- есть нормальная система плагинов
- есть реактивность для Map/Set из коробки
- есть нормальная мутабельность без сотни копий всего подряд
- есть nextTick, не надо костылить с flushSync
#react #vuejs
В последнем
Еще раз напоминаю о важности использования этой фичи, позволяющей иметь разные настройки и расширения для разных проектов, ощутимо улучшая производительность редактора и общий
Малозаметная штука, сильно облегчающая работу. И чего нет у комбайна
#vscode
VS Code
появился более удобный Profile editor
.Еще раз напоминаю о важности использования этой фичи, позволяющей иметь разные настройки и расширения для разных проектов, ощутимо улучшая производительность редактора и общий
DX
.Малозаметная штука, сильно облегчающая работу. И чего нет у комбайна
JetBrains
.#vscode
SWC
(Speedy Web Compiler
) - это быстрый компилятор JavaScript/TypeScript
, написанный на Rust
. Основные характеристики:1. Высокая скорость компиляции
2. Поддержка современного
JavaScript
и TypeScript
3. Может заменять
Babel
во многих сценарияхVite
по умолчанию не использует SWC
, (хотя он может быть подключен, особенно при работе с React
). Vite
использует esbuild
для dev-сборки и Rollup
для prod-сборки.SWC
популярен в мире React
и его тулинга. Разрабатываемый Evan You Rolldown
поначалу использовал SWC
, но потом переключился на еще один JS
компилятор на Rust
- OXC
#rolldown #swc #oxc
Пришла беда откуда не ждали
Обычный
#ai
Обычный
ChatGPT
отлично справляется с задачей реверс инжиниринга и переводит сбилженный и минифицированный JS
обратно в исходник (React
в данном примере)#ai
Glama – MCP Hosting Platform
I was curious about how a component was implemented in a minified JavaScript file and used ChatGPT to reverse engineer the component.