vue2.X基礎知識7の$nexttick

1875 ワード


        var app = new Vue({

            //    
            el: "#app",
            data: {
            	showDiv: false
            },
            
            //      
            methods: {
            	getText: function() {
            		this.showText = true;
			var text = document.getElementById('div').innerHTML;            		
            		console.log(text);
            	}
            }
        });

上のコードが実行されると、cannot read property'innerHTML'of nullというエラーが投げ出されます.ここでは、非同期更新キューという重要な概念について説明します.
Vueは、データの変化を観察したときにDOMを直接更新するのではなく、キューを開き、同じイベントサイクルで発生したすべてのデータの変化をバッファリングする.バッファリング時に重複データが除去され、不要な計算やDOM操作が回避されます.次に、次のイベントループtickで、Vueはキューをリフレッシュし、実際の作業を実行します.
実際、thisを実行しています.showDiv = true;の場合もdivは作成されず、次のVueイベントがループするまで作成されません.$nextTickは、DOM更新がいつ完了するかを知るために使用されるので、上記のサンプルコードは以下のように変更する必要があります.
var app = new Vue({ // el: "#app", data: { showDiv: false }, // methods: { getText: function() { this.showDiv = true; // dom this.$nextTick(function() { var text = document.getElementById('div').innerHTML; console.log(text); }); } } });
理論上、私たちは自発的にDOMを操作する必要はありません.Vueの核心思想はデータ駆動DOMですが、多くの業務では、swiperなどのサードパーティのライブラリを使用することは避けられません.これらのチャンスは、元のjsのライブラリには作成と更新と破棄の完全な宣言サイクルがあり、Vueと組み合わせて使用する場合は、$nexttickを利用する必要があります.
本『Vue.js実戦』より抜粋