riot.js導入への検討材料に。実戦投入して思ったこと。感じた事。
新しいjsのライブラリやら何やらが出るたび、使うの?使わないの?と悩めるフロントエンド寄りの皆様、こんにちわ。
先日、運用中のサイトにて、riot.jsをはじめて導入しました。
以前にも記事を書いていたのですが、実案件で使うのははじめて!ということで、導入のきっかけから、導入してみて感じた事をまとめてみます。
riot.jsを採用するに至った経緯
そもそも、なぜ採用したのか、というところなのですが、4ページも5ページも遷移し、ajaxによって取ってくる内容(json)が変化するキャンペーンページを作る事になったことがきっかけ。
もう、1ページ目がこれで、2ページ目がこれで、あわわわわ!変えたいところ探すの結構大変・・・。となってしまうのでした。
HTML全体のコード、そもそもサイト全体で使っているjqueryベースのコード、ページのためのコード、などなどの見通しを確保したいなあ、HTML部分はWEBコンポーネントかなあ、でも動作ブラウザ不安だな。なんてことを考えていた際、とりあえずriot使ってみるかな!と思い至ったのです。
jQueryを使っていても、コンクリフトさえしなければ別のフレームワーク使っていいじゃないか!という話
普通に考えれば、外部に用意したHTMLを普通に読み込んでも良い気がしますよね。
jQueryだって外部のHTMLを読み込むこと自体はできます。
でも、読み込んだHTMLにいろいろ埋め込むとなるとjsのほうがイケてない感じになってしまうのです。
$('#selector .hoge').text('hogehoge'); $('#selector .fuga').attr('src', json.img); $('#selector .foo').html('<section class="'+json.status+'">'+json.var+'</section>'); // 似たようなものが続く・・・
もうなんか、最低な感じです。
何かしらの方法で、もうちょっといじりやすくしたい!(デザインの差し戻し回数も尋常じゃないしね!)
というわけで、ReactでもPolymerでも、angularjsでも、なんでもいいから使おう!一番(ドキュメントのボリュームも)軽いRiotでいいやん。と、Riotで試してみる事にしました。
そんなわけで使ってみた。
結論から言うと、使ってよかったRiot。という印象でした。
今回は、jQueryのclickイベントや$.ajaxで通信をした結果でriotのtagファイルに変数を渡しながら展開という形をとっています。(遷移が3つくらい少なかった時、jQueryだけで書いていたのです。)
$.ajaxのsuccessのところだけ、すごーくざっくり書くと、
success: function(json, textStatus, xhr) { opts = json; riot.mount("#layout","tpl",opts); },
このくらいで書けてしまいます。
元のHTMLには
<section id="layout"></section> <script src="http://cdn.jsdelivr.net/g/riot@2.2(riot.min.js+compiler.min.js)"></script> <script src="tpl.tag" type="riot/tag"></script>
といったように、riot本体、分割したファイル、レンダリングするための要素を配置。
読み込むtpl.tagにはいい感じに書いたHTMLの変数で書き換えたいところをいじって・・・
<h1>{opts.title}<small>{opts.subTitle}</small></h1>
こんな感じで変数を指定するだけでOK。面倒なコードが削減されます!
実際使ってみてのお話
一番怖かったのは、jQueryとぶつかってエラーがたくさん!という状態が怖かったのですが、何も事件が起こらずに動いてしまいました。
今の所はあまり心配しなくても良いようです。
9KB程度という小さいサイズなので、jQueryのプラグインを使うのとそう変わらない気もしています。
追加のCSSまわりやJSなど、まだ使っていない機能もたっぷりですが、attr()地獄やhtml()地獄の皆さんは一度使ってみると良いかもしれません…!