今回はRiot.jsの基本構造の紹介です。
基本構造
<sample>
	<!-- HTML:Template -->
	<h1>hello world</h1>
	
	<!-- CSS:Style -->	
	<style>
		h1 {
			color: #f00;
		}
	</style>
	
	<!-- Javascript:Logic -->
	<script>
		console.log('Riot.js入門');
	</script>
</sample>
コンポーネントは、このように上から順にテンプレート→スタイル→ロジックと定義していきます(この順番は厳密なものではありません)。
何も珍しいことはないですね。見慣れたHTMLそのものです。
スコープ
これで問題なく動くのですが、このままだとスタイルがページ全体に適応されてしまいます。
コンポーネントは 『内部で完結していて、外部に影響を与えないこと』 が大事なので、影響範囲をコンポーネントの内部のみに適応する書き方をします。
<style scoped>
	:scope {
		display: block;
	}
	
	h1 {
		color: #f00;
	}
</style>
この scoped アトリビュートを記述することで、同一ページにある他の h1 タグには影響を与えず、sample.tag の中の h1 にのみスタイルを適応できます。
ついでに :scope は <sample /> 自身のスタイルを定義できます(この場合は <sample /> はブロック要素になる)。
プリプロセッサ
デフォルトのままだと style の中にはCSS、script の中にはes5標準のJavascriptしか書けませんが、
type アトリビュートを用いることで、好きなプリプロセッサを利用することができます。
<style type="text/scss">
	.hogehoge {
		.fugafuga {
			/* hogehoge */
		}
	}
</style>
<script type="text/babel">
	const TITLE = 'Riot.js入門';
</script>
Rito.jsが公表でサポートしているのは以下の通りです。
CSS
- less
- sass
- scss
- stylus
JS
- livescript
- typescript
- es6 - (babel-coreまたはbabelを使用)
- babel - (babel-core v6.x またはes2015プリセットを使用)
- coffee または coffeescript