これからはじめるVue.js実践入門
posted with ヨメレバ
山田 祥寛 SBクリエイティブ 2019年08月23日頃
書籍「Nuxt.jsビギナーズガイド」のまとめ。
点数
88点
感想
細かくわかりやすく説明されていて、とてもよく理解することができた。
基本
メソッドと算出プロパティの違い
- 算出プロパティは引数を持つことができない 。
引数が必要な場合はメソッドとする。 - 算出プロパティはキャッシュされる。
まず算出プロパティとすることを基本とし、値を常に更新する必要がある場合だけメソッドとする。
オブジェクトのプロパティの追加・削除はリアクティブではない
- オブジェクトのプロパティはリアクティブだが、プロパティの追加・削除はリアクティブではない。
- Vue.setメソッド(またはVueインスタンスの$setメソッド)を使えば後から追加することもできるが、dataオプションに全てのプロパティを空値で最初に用意した方がよい。
(利用しているデータをdataオプションから一望できるため。配列の初期値はnullではなく空配列にするべき。)
$nextTickメソッド
- ビューの更新は非同期(全ての変更をプールして最後にビューに反映される)であるため、リアクティブデータが変更されてもすぐにビューには反映されない。
- Vue.nextTickメソッド(またはVueインスタンスの$nextTickメソッド)を使うと、ビューへの反映を待ってから処理を実行させることができる。
<div id="app">
{{ obj.id }}:{{ obj.name }}
</div>
<script>
const app = new Vue({
el: '#app',
data: {
obj: {
id: '100',
}
},
mounted: function() {
Vue.set(this.obj, 'name', 'hoge');
console.log(this.$el.textContent); // 100:
Vue.nextTick().then(() => {
console.log(this.$el.textContent); // 100:hoge
});
}
})
</script>
ウォッチャーを使ったオートコンプリートのサンプル
- onChangeイベントで入力の度にリストを取得するのは効率が良くない。
入力の切れ目(間隔が空いたとき)で処理を実行することで、サーバへの負荷を軽減することができる。 - Lodashのdebounceメソッドを使うと簡単に実装することができる。
- debounceメソッド 「処理が連続して呼び出された場合、最後に呼び出されてから指定時間後に実行される関数」をつくって返却する。
- 第1引数は関数、第2引数は待ち時間。
- 自身では実行せず、関数を返すという点に注意
- 例)
func = _.debounce(function(){alert(1)}, 2000);// func
は連続してコールしても1回しか実行されない。
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<div id="app">
<input type="text" v-model="memo">
</div>
<script>
const app = new Vue({
el: '#app',
data: {
memo: '',
},
mounted: function() {
this.getOptions = _.debounce(function() {
console.log('データ取得処理');
}, 2000);
},
watch: {
memo: function(newValue, oldValue) {
this.getOptions();
}
}
})
</script>
ウォッチャーでのオブジェクトの監視
- クォートで括らなければならない。
watch: { 'author.name' function(newValue, oldValue) { // 処理 } } }
$mountメソッド
- Vueオブジェクトをインスタンス化する際に「elオプションで指定した要素がまだ存在しない」場合(マウント先の要素をAjax通信で生成する場合など)、new Vue()をelオプションなしで実行し、Vueインスタンスの$mountメソッドでマウントを実行する。
<script>
const app = newVue({ data: { name: 'hoge' } });
// ここにマウント要素生成処理が入る
app.$mount('#app');
</script>