А я-то в кои-то веки думал цивилизованную дискуссию вести... Глупый, глупый я 😔
А всего-то стоило немного погуглить и найти пост Дэна Абрамова. Который TL;DR: "Мы подумали, что так будет лучше, а когда поняли, что не будет, было уже слишком геморно всё менять".
Это не так, иначе бы JSX не могли использовать другие фреймворки. А оно спокойно существует и в SolidJS, и в Stencil, и в Vue, кстати говоря (по крайней мере, можно было в той версии, с которой я знакомился). И если мне память не изменяет, из всех них только реакт использует className. И да, даже если вы в реакте напишете class, он не умрёт на этапе компиляции, а честно создаст объект с полем class.
Функции в шаблон Lit передавать не рекомендуют. Для реакции на события есть @-поле, оно там отдельно оптимизировано (там используется объект { handleEvent }, который заведует подпиской на событие, и у которого просто заменяется функция, так что на слушателей shallow check не распространяется).
Обход по всем значениям это не круто
Это уже экономия на спичках. Цикл — одна из самых оптимизированных операций в JS, тем более тот, который не использует итераторы. Вряд ли вы будете создавать шаблон с миллионом значений, а с таким объёмом JS справляется за миллисекунды.
Не задавались вопросом почему вместо class в JSX className?
Потому что разрабам реакта было влом переименовать переменную. Все остальные фреймворки спокойно пользуются class и в ус не дуют, это только реакт такой особенный.
Он там частичный абсолютно всегда. Любое изменение дёргает только конткретные атрибуты/поля/ивенты. Изначальный код HTML заворачивается в template, далее в местах разрыва tag literal регистрируются "дырки" (holes или values), которые при повторном рендере обновляются по изменению value по конкретному индексу. В общем, все преимущества Virtual DOM без его недостатков. Свои caveats там, конечно, тоже есть (например, нельзя вдруг поменять имя тэга, это требует пересчёта всего элемента и теряет все преимущества), но по сравнению с virtual dom они гораздо менее существенны. И работает безо всякой транспиляции, прямо в браузере.
Критическая проблема данного подхода — это неподсвечиваемые, невалидируемые (через линт) и неформатируемые выражения внутри строк. Собственно, для решения этой проблемы и появился JSX. Он позволяет использовать все возможности JS без ограничений, и при этом всё ещё иметь выразительный язык шаблонов. Ангуляр, кстати, тоже от этой проблемы страдает, но это уже просто наследие ранних подходов.
Но если так хочется совместить строки и pure JS, почему не воспользоваться Lit? (точнее, lit-html, веб компоненты тянуть не обязательно). Lit как раз отлично решает проблему: это прямые строки, никакой компиляции, и в то же время можно свободно пользоваться возможностями языка
автор коммента про то, что это чуть ли не новый стандарт и нужно использовать только их сразу куда то слился с обсуждения. Как это всегда бывает. И как будет с вами.
Пхпх, а чего мне на вас время тратить-то 🤭 Что вообще можно сказать лягушке, которая не интересуется ничем, кроме своего колодца?
Иммутабельные паттерны разработки UI-приложений в последние годы стали одними из самых популярных
Я даже пошёл календарь перепроверить, не оказался ли я случайно в 2018. Иммутабельные паттерны разработки при том, что у нас уже много лет есть сигналы? `Immutable.js` в 2026? И я, конечно, догадывался, что Redux всё ещё где-то рядом с нами, но назвать его популярным?
В общем, статья вызывает большие вопросы о релевантности (и ностальгию!)
Разработчики сафари наотрез отказались поддерживать эту спеку. Так что её можно не ждать. Плюс многие инструменты для веб-компонентов нарочито игнорируют её. У меня есть смутное подозрение, что рано или поздно её выпилят за ненадобностью.
Вообще вначале я был очень "за" эту спеку, но после нескольких попыток её использовать я понял, что по сути она мне не нужна. Для веб компонентов я чаще всего использую ShadowDOM, а custom built-in elements мне такой возможности не дают. В результате я так ни разу ею и не воспользовался, хотя у ungap project есть хороший полифилл для этого (а ещё я сам такой полифилл писал).
А я-то в кои-то веки думал цивилизованную дискуссию вести... Глупый, глупый я 😔
А всего-то стоило немного погуглить и найти пост Дэна Абрамова. Который TL;DR: "Мы подумали, что так будет лучше, а когда поняли, что не будет, было уже слишком геморно всё менять".
Учитесь гуглить, уважаемый.
Ээ, простите, вы о чём? Не вижу связи
Это не так, иначе бы JSX не могли использовать другие фреймворки. А оно спокойно существует и в SolidJS, и в Stencil, и в Vue, кстати говоря (по крайней мере, можно было в той версии, с которой я знакомился). И если мне память не изменяет, из всех них только реакт использует
className. И да, даже если вы в реакте напишетеclass, он не умрёт на этапе компиляции, а честно создаст объект с полемclass.Примеры:
BabelJS
TypeScript
Esbuild
Функции в шаблон Lit передавать не рекомендуют. Для реакции на события есть
@-поле, оно там отдельно оптимизировано (там используется объект{ handleEvent }, который заведует подпиской на событие, и у которого просто заменяется функция, так что на слушателей shallow check не распространяется).Это уже экономия на спичках. Цикл — одна из самых оптимизированных операций в JS, тем более тот, который не использует итераторы. Вряд ли вы будете создавать шаблон с миллионом значений, а с таким объёмом JS справляется за миллисекунды.
Потому что разрабам реакта было влом переименовать переменную. Все остальные фреймворки спокойно пользуются
classи в ус не дуют, это только реакт такой особенный.Ммм, вы говорите про shallow check, что ли? Если сильно (очень сильно!) упрощать, то он выглядит как-то так:
Что тут может нагружать CPU, да ещё и неимоверно?
Он там частичный абсолютно всегда. Любое изменение дёргает только конткретные атрибуты/поля/ивенты. Изначальный код HTML заворачивается в template, далее в местах разрыва tag literal регистрируются "дырки" (holes или values), которые при повторном рендере обновляются по изменению value по конкретному индексу. В общем, все преимущества Virtual DOM без его недостатков. Свои caveats там, конечно, тоже есть (например, нельзя вдруг поменять имя тэга, это требует пересчёта всего элемента и теряет все преимущества), но по сравнению с virtual dom они гораздо менее существенны. И работает безо всякой транспиляции, прямо в браузере.
А если я пользкюсь Intellij IDEA? )
Критическая проблема данного подхода — это неподсвечиваемые, невалидируемые (через линт) и неформатируемые выражения внутри строк. Собственно, для решения этой проблемы и появился JSX. Он позволяет использовать все возможности JS без ограничений, и при этом всё ещё иметь выразительный язык шаблонов. Ангуляр, кстати, тоже от этой проблемы страдает, но это уже просто наследие ранних подходов.
Но если так хочется совместить строки и pure JS, почему не воспользоваться Lit? (точнее, lit-html, веб компоненты тянуть не обязательно). Lit как раз отлично решает проблему: это прямые строки, никакой компиляции, и в то же время можно свободно пользоваться возможностями языка
Ааа, вон оно как! Спасибо за объяснение, паззл сложился 😊
В августе? 2023? 🧐
Пхпх, а чего мне на вас время тратить-то 🤭 Что вообще можно сказать лягушке, которая не интересуется ничем, кроме своего колодца?
Вы там под корягой прогаете, если про сигналы не слышали, или да?
А вообще смешно, конечно, смотреть на ваши потуги доказать, что вы правы.
Но меж тем реальность, увы, не на вашей стороне.
Preact изобрёл сигналы (ну, не то чтобы это новая технология, но именно их реализация запустила хайп)
React принял сигналы по умолчанию (в смысле, они ничего не делали, Preact изначательно реализовывал сигналы и для реакта тоже).
Ангуляр внедрил у себя сигналы, который заменяют (барабанная дробь) rxjs.
У Vue они теперь тоже есть, как Alien Signals.
Solid с сигналами работает ещё до Preact.
Svelte втащили себе сигналы.
И даже в TC39 появился пропозал на включение нативных сигналов в платформу.
Если это не популярность, то вы попросту отрицаете реальность, пытаясь основываться на ничего не значащих циферках.
Вот как? Тогда самый популярный стейт-менеджер это rxjs. Ни редакс, ни ваш зустанд рядом даже чихнуть не смеют. Всё верно?
И что вы этим докажете? Что много легаси на редаксе работает? Ну так на jQuery 90% веба до сих пор крутится.
А вот предложение на включение в JS редакс точно не получал.
Я даже пошёл календарь перепроверить, не оказался ли я случайно в 2018. Иммутабельные паттерны разработки при том, что у нас уже много лет есть сигналы? `Immutable.js` в 2026? И я, конечно, догадывался, что Redux всё ещё где-то рядом с нами, но назвать его популярным?
В общем, статья вызывает большие вопросы о релевантности (и ностальгию!)
AbortController: ну да, ну да, пошёл я нафигНу, maintenance mode же. Конечно что-то фиксят. Но вот Material Expressive уже не дождёмся, как и бо́льшей части компонентов оригинальной спеки
Уже не пилит, увы
Разработчики сафари наотрез отказались поддерживать эту спеку. Так что её можно не ждать. Плюс многие инструменты для веб-компонентов нарочито игнорируют её. У меня есть смутное подозрение, что рано или поздно её выпилят за ненадобностью.
Вообще вначале я был очень "за" эту спеку, но после нескольких попыток её использовать я понял, что по сути она мне не нужна. Для веб компонентов я чаще всего использую ShadowDOM, а custom built-in elements мне такой возможности не дают. В результате я так ни разу ею и не воспользовался, хотя у ungap project есть хороший полифилл для этого (а ещё я сам такой полифилл писал).
Привет, ChatGPT, мой старый друг 🤭