Comments 10
<.div(^.cls := "container",
<.h1("Spotify Track Listing"),
<.div(^.cls := "form-group",
<.label(^.`for` := "artist", "Artist"),
<.div(^.cls := "row", ^.id := "artist",
<.div(^.cls := "col-xs-10",
<.input(^.`type` := "text", ^.cls := "form-control",
^.value := s.artistInput, ^.onChange ==> updateArtistInput
)
),
<.div(^.cls := "col-xs-2",
<.button(^.`type` := "button", ^.cls := "btn btn-primary custom-button-width",
^.onClick --> searchForArtist(s.artistInput),
^.disabled := s.artistInput.isEmpty,
"Search"
)
)
)
),
Знаете, мне тоже не нравится такая нотация.
Мне кажется, что даже JSX в разы лучше читается в js и вообще используется, чем ваша эта нотация аля JSX. Лучше уж тогда использовать стандартные функции реакта, чем этот недо JSX.
Дело не в scalatags, а в обертке над scalatags с этими ^ < --> символами. Сам scalatags читается очень легко и просто. А вот scalatags в scala-js-react — тот еще адок. Почти все, с кем я общался по поводу scala-js при виде такого синтаксиса приходят в ужас.
Однако, в scala-js-react можно не использовать такой синтаксис, а использовать стандартный scalatags синтаксис. Я бы порекомендовал для вводной статьи использовать именно его, дабы не распугивать людей.
https://github.com/ThoughtWorksInc/Binding.scala
https://github.com/OlivierBlanvillain/monadic-html
Представленные библиотеки и React подходят к изменению DOM с разных сторон.
В реакте при изменении состояния приложения делается новый рендер в память, потом делается дифф со старым рендером, в результате которого получаем некий набор действий, как получить из старого дома новый. И накладываем эти действия на реальный дом.
В реактивных библиотеках совсем другой подход. Там есть реактивные потоки, которые как-то забиндены на некоторые участки дом. Если прилетело новое значение в поток (изменился Var), то элемент дома просто заново отрисуетсяи вставится.
Не охота разводить холивар, но эти подходы очень разные. И на текущий момент react-like библиотек на pure scala просто нет. Единственный вариант — делать обертки над react или react-like библиотеками.
Создание веб-приложений с помощью Scala.js и React — часть 1