import Vue from 'vue'; export default { setup(props, context) { console.log(Vue.version); return {}; } };
応答性の state
を変更すると、Vue
updateDOM
はリアルタイムで同期的に更新されませんが、同期的に実行されるすべての状態更新はキャッシュされ、同期コードは実行が完了したら、Dom 更新操作を実行します。これにより、render
のパフォーマンスが大幅に最適化され、Dom
更新の数が削減されます;
そして、この機能がもたらす 1 つの問題は次のとおりです。 state
が変更された後は実際の Dom
を取得できないため、Vue は更新された state
Dom# を取得するための
nextTick を提供します。
##
function nextTick(callback?: () => void): Promise<void>
ユースケース
<template> <div class="test_demo"> <h3 class="text">{{ text }}</h3> <button @click="onBtnClick">更新</button> </div> </template> <script lang="ts" setup> import { ref, nextTick } from 'vue'; const text = ref('test_0'); const onBtnClick = () => { text.value = 'test_1'; nextTick(() => { const text = ( document.querySelector<HTMLElement>('.text') as HTMLElement ).innerText; console.log(text); }); text.value = 'test_2'; }; </script>
Update ボタンをクリックした後、test_2 を出力します。ただし、
text.value = 'test_1'; をコメントアウトすると、出力結果は大きく異なり、test_0 が出力されます。
text.value割り当て操作は同期的でリアルタイムです。コードの実行で
応答状態の変化が発生すると、
ビュー更新ロジック##が発生します。 # マイクロタスク キューに移動し、nextTick が検出されると、それもマイクロタスク キューに送信されます。したがって、上記のコードでは、View 更新ロジック
が nextTick
の前にあり、Text.value = 'test_1' を変更することで
View 更新ロジック が実行されます。
と text.value = 'test_2'
マージ後にビューを更新するため、test2 を出力します;コメントアウト
,nextTick
マイクロタスク キュー内の順序は View update ロジック
よりも前であるため、test_0 が出力されます。 defineComponent (型推論のための補助関数。TypeScript がコンポーネント オプションの型を正しく推測できるようにします)