Comments 34
Немного отвлеченно, вставлять html разметку в код теперь считается круто?
+4
Что значит «круто»?
+4
Вообще конечно вопрос интересный. Делать вещи в духе
$('selector').append('<div>something</div>')
не очень круто. А подход реакта — вполне. По крайней мере разработчики считают, что так как компоненты не столько меняют DOM, а просто генерируют дерево абстарктных объектов, то почему бы не засунуть код, возвращающий это самое дерево, прямо в код компонента? Вполне логичное решение, ИМХО.+7
Интересный момент в том, что в PHP, откуда, видимо, создатели и черпали вдохновение, уже много лет считается хорошей практикой не смешивать HTML и логику. Именно на этом настаивают сторонники дополнительных шаблонизаторов в PHP, который сам по себе неплохой шаблонизатор.
-6
Ну насколько я себе понимаю то, что предлагает Реакт (по крайней мере я так стараюсь реализовывать код на нём в своих проектах), логика и так должна быть отделена от представления. Компонент занимается только переносом состояния в верстку. Вся бизнес-логика сидит отдельно.
+11
Не путайте «бизнес логику» и «логику отображения». Некоторые в PHP комьюнити, знаете ли, до сих пор в базу из view лезут.
+8
В императивной шаблонизации я сторонник подхода, при котором представление — это практически чистый HTML, код в котором ограничивается выводом значений переменных, циклами, ну, может, еще какими-нибудь элементарными вещами. Мне кажется, что много HTML — мало кода читается гораздо лучше и выглядит гораздо чище, чем много HTML и много кода. А уж о бизнес-логике в представлении и речи не было.
0
При использовании lazy loading и прочих абстракций типа прокси и декораторов залезть в базу через какой-нить геттер вполне нормально, даже если она меняется при этом (например, пишется лог обращений к записи).
0
JSX не является разметкой. А смысл функции render отдать virtual dom.
+3
Не круто, но если это действительно становится проблемой (а до определённого предела это лишь академическое замечание), то я уверен, что можно вынести шаблоны в отдельные файлы и использовать шаг сборки: gulp, плагины browserify для инклуда файлов и т.п.
Ещё есть альтернативный подход к решению этой проблемы: использование конструкторов JS для генерации виртуального дерева. Можно использовать встроенные в React конструкторы, а можно использовать библиотеку, которая позволяет сделать это более лаконично, например JSnoX.
Лично для меня это не является проблемой, потому что можно вообще не использовать JSX. По какой-то причине я не полюбил JSX, хотя до этого имел дело, например, с Ангуляром и Vue, которые постулируют похожий подход работы с разметкой. Использование чистого JS видится мне более гибким и компонуемым.
Ещё есть альтернативный подход к решению этой проблемы: использование конструкторов JS для генерации виртуального дерева. Можно использовать встроенные в React конструкторы, а можно использовать библиотеку, которая позволяет сделать это более лаконично, например JSnoX.
Лично для меня это не является проблемой, потому что можно вообще не использовать JSX. По какой-то причине я не полюбил JSX, хотя до этого имел дело, например, с Ангуляром и Vue, которые постулируют похожий подход работы с разметкой. Использование чистого JS видится мне более гибким и компонуемым.
0
Немного отвлеченно, вставлять html разметку в код теперь считается круто?
Тут зависит от того, кто автор фреймворка. От facebook — это OK, создали новую парадигму, от Васи Пупкина — загнобили бы.
+11
К сожалению, отделять логику от представления в js очень сложно. Я несколько раз наблюдал раздутые шаблоны на каком-нибудь хенделбарс, с кучей хелперов, в итоге, в шаблоне получается адская смесь из: 1) html, 2) js 3) кода специфичного шаблонизатора.
facebook не стал бороться, просто убрали синтаксический шум из кавычек, переносов слов, запилили интерполяцию строк. Компоненты на много гибче и проще, чем с вынесенным отдельно шаблонизатором. Да и вообще, никто не мешает писать что-то типа:
facebook не стал бороться, просто убрали синтаксический шум из кавычек, переносов слов, запилили интерполяцию строк. Компоненты на много гибче и проще, чем с вынесенным отдельно шаблонизатором. Да и вообще, никто не мешает писать что-то типа:
React.createElement("div", null);
+9
Угу, я на это не явно и намекал.
0
Автор ничего не сказал про переносимость компонентов реакта. Могу я один и тот же компонент, однажды написанный, использовать в разных проектах? Так, чтобы без копипасты?
+3
Я думаю вы всегда можете оформить свой компонент как npm модуль и подгружать его куда хотите
+2
Вот пример react-bootstrap.github.io/
+1
Да!
0
По поводу server-side рендеринга, тут дело нодой не ограничивается, я например делал изоморфное приложение на Clojure + Om (ClojureScript обертка над ReactJs) и рендерил на сервере с помощью Nashorn, который появился в Java 8. Работало прекрасно.
+1
Занятный у вас стек, сударь :)
+4
Это я так, вне работы балуюсь.
А насчет стека — что так удивляет?
На кложе, не поверите, очень приятно писать: ФП, трансдьюсеры, иммутабельность, lazy-seqs, core.async, интеграция с JVM и возможность использования модулей на Java/Scala/..., core.typed там, вот это вот все… хотя последнее скорее костыль пока.
Очень уж лаконично и красиво получается все в целом.
Ах да, я еще и Datomic использую (http://www.datomic.com/), так что у меня еще и база на кложе. ;)
А насчет стека — что так удивляет?
На кложе, не поверите, очень приятно писать: ФП, трансдьюсеры, иммутабельность, lazy-seqs, core.async, интеграция с JVM и возможность использования модулей на Java/Scala/..., core.typed там, вот это вот все… хотя последнее скорее костыль пока.
Очень уж лаконично и красиво получается все в целом.
Ах да, я еще и Datomic использую (http://www.datomic.com/), так что у меня еще и база на кложе. ;)
0
UFO just landed and posted this here
Ничуть не смущают теги в JS, так или иначе генерация компонентов на JS к этому приводит, но на разных уровнях. Гораздо важнее один из пунктов статьи, про побочную сложность, дырявые абстракции и актуальность библиотеки через год-два. С другой стороны, волка бояться, так и продолжать писать на низком уровне, без абстракций и плюшек.
0
Упрямая архитектура (Opinionated Architecture)Обычно — «жёсткая архитектура (фреймворка)».
0
С 5 пунктом я бы поспорил.
Дело в том, что реакт рендерится на сервере крайне неэффективно.
Оба метода, которые преобразуют компонент в строку (renderToString и renderToStaticMarkup) на каждую ноду вызывают свое преобразование. А вызов функции это более-менее затратная операция.
Я проверил на синтетическом тесте, в сравнении с *любимым шаблонизатором*
jsperf.com/react-rendertostring/7 — строится список из 100 элементов, у реакта производительность в десятки раз ниже.
Я пока в самом начале пути освоения реакта, но меня это настораживает. А еще больше настораживает что информации об этом не так много.
Дело в том, что реакт рендерится на сервере крайне неэффективно.
Оба метода, которые преобразуют компонент в строку (renderToString и renderToStaticMarkup) на каждую ноду вызывают свое преобразование. А вызов функции это более-менее затратная операция.
Я проверил на синтетическом тесте, в сравнении с *любимым шаблонизатором*
jsperf.com/react-rendertostring/7 — строится список из 100 элементов, у реакта производительность в десятки раз ниже.
Я пока в самом начале пути освоения реакта, но меня это настораживает. А еще больше настораживает что информации об этом не так много.
0
Если поисковики (для которых вы и будете рендерить на сервере страницу) заходят на ваш сайт чаще реальных пользователей (где все это будет на клиенте), то это значит что не библиотека неэффективна, а сам сайт ваш не эффективен :)
-1
То есть реакт не подходит, если есть требование чтобы страницы для клиентов рендерились на сервере. В статье же написано что «Реакт можно использовать для подачи статичной разметки, без клиентского кода вообще.»
-1
Sign up to leave a comment.
Нетрадиционный обзор React