Vue における nextTick の役割といくつかの簡単な使用シナリオ

Vue における nextTick の役割といくつかの簡単な使用シナリオ

目的

nextTickの役割といくつかの簡単な使用シナリオを理解する

文章

その機能は何ですか?

遅延コールバックは、次の DOM 更新サイクルが完了した後に実行されます。データの変更後すぐにこのメソッドを使用して、更新された DOM を取得します。

Vue のレンダリング プロセスは誰もが知っているか理解していると思います。Vue はデータの変更を監視した後、再レンダリングを行い、VDOM と連携して実際の DOM を更新します。nextTick のトリガー時間は、メソッドが呼び出された後の最初の再レンダリング後です。

使い方は?

使い方は2通りあり、1つはコールバックを渡す方法、もう1つはPromiseを使う方法です。公式の使用例は以下の通りです。

// データを変更 vm.msg = 'Hello'
// DOMはまだ更新されていません Vue.nextTick(function () {
 // DOMが更新されました})

// Promise として使用します (2.1.0 以降の新機能、詳細については以下のヒントを参照してください)
Vue.nextTick()
 .then(関数() {
 // DOMが更新されました})

SPA(単一ファイルコンポーネント)の場合は次のようになります。

<テンプレート>
 <div id="test">{{メッセージ}}</div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: 'アプリ',
 データ() {
 戻る {
  "msg": "こんにちは世界!"
 }
 },
 方法() {
 this.msg = "こんにちは世界!";
 this.$nextTick(() => {
  console.log('DOM が更新されました:', document.getElementById('test').innerHTML)
 });
 }
}
</スクリプト>

使用シナリオは何ですか?

いくつかのメソッドは、実行前にレンダリングが完了するまで待つ必要があります。

バインディングを初期化するかDOMを操作する

たとえば、作成およびマウントされたコールバックでレンダリングされた DOM を操作する必要がある場合は、nextTick で関連するロジックを実行する必要があります。これは、DOM にバインドする必要がある古いライブラリを使用する必要がある場合に非常に便利です。

例えば、UEditorをロードするときには、次のようにします。

<テンプレート>
<script id="container" name="content" type="text/plain"> ここに初期化コンテンツを記述します</script>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 マウント() {
  this.nextTick(() => {
   var ue = UE.getEditor('コンテナ');
  });
 }
}

要素の幅を取得する

Vue で要素の幅を取得する方法は 2 つあります。1 つ目は$refs[ref名稱].style.widthを使用する方法で、2 つ目は従来の DOM 操作方法を使用して取得する方法です。ただし、正確な要素の幅を取得するには、DOM レンダリングが完了した後に両方の方法を実行する必要があります。

<テンプレート>
<p ref="myWidth" v-if="showMe">{{ message }}</p> <button @click="getMyWidth">p 要素の幅を取得します</button>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 データ() {
 戻る {
  メッセージ: "Hello world!",
  showMe: 偽、
 },
 メソッド: {
  幅を取得します(){
  this.showMe = true;
  //this.message = this.refs.myWidth.offsetWidth; //TypeError: this.refs.myWidth は未定義です 
  this.nextTick(()=>{
  //DOM 要素が更新された後に実行し、p 要素の属性を取得できます this.message = this.refs.myWidth.offsetWidth; })
  }
 }
 }
}
</スクリプト>

要約する

Vue の設計哲学では DOM を直接操作することは推奨されていませんが、いくつかのシナリオでは特に混乱を招く問題が発生します。Vue のレンダリング ロジックを理解した後、 nextTick() を使用すると、それらの問題を解決できます。

以上が、Vue での nextTick の使い方の詳細です。Vue での nextTick の使い方の詳細については、123WORDPRESS.COM の他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • Vue nextTickの原理の分析
  • Vue の nextTick の簡単な分析
  • Vue の $nextTick の包括的な分析
  • VUE は DOM を非同期的に更新します - $nextTick を使用して DOM ビューの問題を解決します
  • Vue.js 原理分析: nextTick 実装の詳細説明
  • Vue における this.$nextTick の機能と使用方法
  • Vue での $nextTick と $forceUpdate の使い方の詳細な説明
  • Vue nextTick の使い方と原理の詳細な研究
  • Vue での NextTick の使用例
  • Vue ソースコード nextTick の使用法と原理分析
  • Vue の nextTick について 1 つの記事で学ぶ
  • ブラウザイベントループとvue nextTicketの実装
  • Vue での $nextTick の使い方の説明
  • ソースコードからvueのnextTickの使い方を理解する
  • Vue2.0$nextTickは、データのレンダリングが完了した後にコールバック関数メソッドをリッスンします。
  • DOM を操作する際の vue ディレクティブと $nextTick の違いの詳細な説明
  • Vue nextTick メカニズムの詳細な理解
  • Vue の nextTick について話す

<<:  Centos7 の起動プロセスと Systemd での Nginx の起動構成

>>:  Navicat が MySQL に接続するときに発生する 1045 エラーの解決方法

推薦する

JavaScript ベースで年・月・日の 3 階層連携を実現

この記事では、年、月、日の3段階のリンクを実現するためのJavaScriptの具体的なコードを参考ま...

MySQL 5.7.17 圧縮バージョンのインストールノート

この記事では、参考までにMySQL 5.7.17圧縮版のインストール手順を紹介します。具体的な内容は...

MySQL スライディングオーダー問題の原理と解決の例分析

この記事では、例を使用して、MySQL スライディング順序問題の原理と解決方法を説明します。ご参考ま...

WeChat アプレット wxs 日付と時刻処理の実装例

目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...

IE環境では、divの高さはフォントの高さよりも大きくなければならないと規定されています。

コードをコピーコードは次のとおりです。 <div class="content&qu...

ab ツールを使用してサーバー上で API ストレス テストを実行します。

目次1 システムスループットの簡単な紹介2 試験方法2.1 クライアントテストツール2.1.1 GE...

ローカル yum ソースの設定、国内 yum ソースの設定、epel ソースの設定を行う Linux の手順

1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...

標準SQL更新ステートメントの3つの用途についての簡単な理解

1. 環境: MySQL-5.0.41-win32 Windows XP プロフェッショナル2. テ...

ソフトウェア テスト - MySQL (VI: データベース関数)

1.MySQL関数1. 数学関数PI() # 円周率 (pi) の値を返します。デフォルトの小数点...

Hadoop を使用せずに Linux 環境に Spark のスタンドアロン バージョンをインストールする方法

ビッグデータはますます注目を集めており、ビッグデータのいくつかの構成要素に精通していないと、自慢でき...

値の転送を実現するために、2つの同じレベルのコンポーネントをVueで作成します。

Vue コンポーネントは接続されているため、コンポーネント間で値を渡す必要があるのは避けられません...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

ディスク容量不足による MySQL レプリケーション障害の解決方法

目次ケースシナリオ問題を解決するまとめケースシナリオ本日、オンラインで問題が発見されました。監視範囲...

mysql5.7 以降で my.ini を設定するための詳細な手順

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリ、my-...