ライフサイクルを理解する理由
ライフサイクルとは
さらに、Vue インスタンスは Vue フレームワークのエントリ ポイントであり、フロントエンドの ViewModel として理解できます。ページ内のビジネス ロジック処理とデータ モデルが含まれています。また、Vue インスタンスの生成、コンパイル、ハング、破棄のプロセス全体にわたって js 制御を実行するのに役立つ独自のライフ サイクル関数フックもあります。 ライフサイクルフック関数ライフサイクルフックはライフサイクルイベントの別名です。ライフサイクルフック = ライフサイクル関数 = ライフサイクルイベント 主なライフサイクル機能のカテゴリは次のとおりです。
作成され、マウントされたライフサイクルフック関数の中で、最もよく使用されるのは、おそらく created と mount です。
実際、この 2 つは比較的理解しやすいです。通常、create の方が頻繁に使用され、mounted は通常、プラグインまたはコンポーネントを使用するときに実行されます。たとえば、chart.js プラグインを使用する場合: var ctx = document.getElementById(ID); 通常はこの手順があります。これをコンポーネントに書き込むと、create でチャートの初期化構成を実行できないことがわかります。続行するには、html がレンダリングされるまで待つ必要があります。この場合、mounted が唯一の選択肢です。 フックの実用的な使い方1. 非同期関数ここではタイマーを使って非同期関数を実行します <div id="アプリ"> <ul> <li v-for="(item,index) of list" key="index">{{item}}</li> </ul> </div> <script type="text/javascript"> var アプリ = 新しい Vue({ el:'#app', データ:{ リスト:['aaaaaaaa','bbbbbbbb','cccccccc'] }, 作成された:関数(){ consoloe.log('非同期で作成されました: aaaaa'); //非同期データ取得 // 非同期なので、Ajaxデータ取得setTimeout(()=>{と同じです this.list=['111','222','333','444'], console.log('非同期で作成されました:', document.getElementsByTagName('li').length); },0) }, マウント: 関数 () { console.log('マウントされました:',document.getElementsByTagName('li').length); }, 更新: 関数 () { console.log('更新日時:',document.getElementsByTagName('li').length) }, }) </スクリプト> 結果は次のとおりです。
説明する: 作成されたフックに非同期関数が追加されているため、関数の実行順序は次のようになることがわかります。 作成フック、マウントフック、非同期関数、更新フック(イベントキューの原則によれば、更新された後にのみ、li は実際に 4 つの DOM としてレンダリングされるため、非同期関数で取得される li の数は、変更されていない li の数と同じです)。 mount は Vue のデータに初期値を設定して DOM をレンダリングし、非同期関数内でリストデータを変更しているため、mounted によって取得される li の数は 3 になります。 更新関数は、データビューにバインドされたデータが変更される限りトリガーされるため、最後に実行されます。 これは、更新関数内で直接操作できることを意味しますか? 実際のところ、そうではありません。更新関数は Vue 内のすべてのデータ変更を対象としており、他のデータ変更も発生する可能性があるからです。 たとえば、次の例をご覧ください。 // 非同期関数を使用してリストを2回変更すると、更新が2回トリガーされることがわかります。created: function() { //非同期データ取得 // 非同期なので、Ajaxデータ取得setTimeout(()=>{と同じです this.list=['111','222','333','444'], console.log('非同期で作成されました:', document.getElementsByTagName('li').length); },0) タイムアウトを設定します(()=>{ this.list=['ハッピーキャンプ', 'ダウン・トゥ・アース', '300033', '日々の進歩', '一生懸命勉強'], console.log('非同期で作成されました:', document.getElementsByTagName('li').length); },1000) }, マウント: 関数 () { console.log('マウントされました:',document.getElementsByTagName('li').length); }, 更新: 関数 () { console.log('更新日時:',document.getElementsByTagName('li').length) }, 結果は次のとおりです。 2. Vue.nextTickは非同期関数の結果に対して動作しますデータを変更したいときは、それぞれ独自のメソッドをトリガーします 作成された:関数(){ // 非同期データ取得 // 非同期なので、Ajax データ取得と同じです // データ変更後に Vue が DOM の更新を完了するまで待機するには、データ変更直後に Vue.nextTick(callback) を使用できます。この方法では、DOM の更新が完了した後にコールバック関数が呼び出されます。 タイムアウトを設定します(()=>{ this.list=['111','222','333','444'], console.log('非同期で作成されました:', document.getElementsByTagName('li').length); this.$nextTick(関数(){ console.log("created$nextTick:",document.getElementsByTagName('li').length) }); },0) タイムアウトを設定します(()=>{ this.list=['ハッピーキャンプ', 'ダウン・トゥ・アース', '300033', '日々の進歩', '一生懸命勉強'], console.log('非同期で作成されました:', document.getElementsByTagName('li').length); this.$nextTick(関数(){ console.log("created$nextTick:",document.getElementsByTagName('li').length) }); },1000) }, マウント: 関数 () { console.log('マウントされました:',document.getElementsByTagName('li').length); }, 更新: 関数 () { console.log('更新日時:',document.getElementsByTagName('li').length) }, 結果は次のとおりです。 $nextTickを通じて、非同期関数の結果に対して独自の操作を実行できることがわかります。 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析
>>: どのような種類の MYSQL 接続クエリを知っていますか?
1.ピクセルpx はピクセルの略語で、画面解像度に対する相対的な長さの単位です。 2. えむ参照は親...
序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...
主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...
目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...
目次まずページレイアウトを構築する必要がありますJS関数1 JS関数2 JS関数3 JS関数4効果図...
本日の投稿では、Web デザインで使用される円形要素の優れた例をいくつか挙げ、美しい丸いボタン、メニ...
1.Mysqlスクリプトのワンクリックインストール [root@uat01 ~]# cat Inst...
環境要件: IPホスト名192.168.1.1ノード1プロジェクト計画:コンテナネットワークセグメン...
MySQL の全体的なアーキテクチャは、サーバー層とストレージ エンジン層に分かれています。サーバー...
この記事では、参考までに、カルーセル効果の具体的なコードをJavaScript+CSSを使用して実装...
これはモーダル ボックスのドラッグのケースです。ここで実装する関数は次のとおりです。 1. ポップア...
1. 外部キーの設定方法1. MySQL では、2 つのテーブルを関連付けるために、外部キー (FO...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...
Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...
<br />最も実用的なものを選んで話しましょう。まず、勤務先の都市を慎重に選ぶ必要があ...