Riot.jsのタグのライフサイクルについてのメモ
公式ページにタグのライフサイクルについてこう書かれている。
A tag is created in following sequence:
- Tag is constructed
- Tag’s JavaScript logic is executed
- HTML expressions are calculated and “update” event is fired
- Tag is mounted on the page and “mount” event is fired
これに加えてobservable
でイベントを発火させたら順番はどうなるか確かめたのでそのメモ。
※確認したバージョンは2.4.1
<script type="riot/tag"> <app> console.log('first'); // observableによるイベント発火 obs.trigger('my_event', 'second '); // マウント時 this.on('mount', function() { // observableによるイベント発火 obs.trigger('my_event', 'after mount '); console.log('mount!!'); }); // アップデート時 this.on('update', function() { // observableによるイベント発火 obs.trigger('my_event', 'after update '); console.log('update!!'); }); // アップデート後 this.on('updated', function() { console.log('updated!!'); }); // イベント発火時 obs.on('my_event', function(text) { console.log(text + 'my event!!'); }); </app> </script>
上記では以下のタイミングでmy_event
が発火するか確認している。
app
タグのJavaScriptが評価update
イベント発火時mount
イベント発火時
結果はこのようになる。
first after update my event!! update!! after mount my event!! mount!! updated!!
ほぼ公式のガイド通りだったが、second my event!!
が出力されない。
タグ内のJavaScriptが評価されるタイミングではobservable
によるイベントは発火できないということらしい。
覚えておこう。