序文面接中、多くの面接官は「keep-alive が何をするのか知っていますか?」と質問する際に Vue について言及することがあります。 keep-aliveはvueの組み込みコンポーネントであり、このコンポーネントの機能は非アクティブなコンポーネントをキャッシュすることです。一般的に、コンポーネントが切り替えられると、デフォルトで破棄されることはわかっています。要求があれば、コンポーネントは切り替え後に破棄されず、前の状態が保存され、keep-aliveを使用して実現できます。 <keep-alive> は Vue の組み込みコンポーネントであり、コンポーネントの切り替え中に状態をメモリ内に保持して、DOM の繰り返しレンダリングを防ぐことができます。
スキャフォールディングを使用してプロジェクトを作成すると、home と about の 2 つのコンポーネントが生成され、ルーティングを通じて切り替えられます。 ホームコンポーネント<テンプレート> <div class="home"> <入力タイプ="テキスト"> </div> </テンプレート> <スクリプト> // @ は /src へのエイリアスです '@/components/HelloWorld.vue' から HelloWorld をインポートします。 エクスポートデフォルト{ 名前: 'ホーム', コンポーネント: こんにちは世界 } } </スクリプト> ホームコンポーネントに入力ボックスを作成しました コンポーネントについて<テンプレート> <div class="about"> <入力タイプ="テキスト"> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"について" } </スクリプト> コンポーネントについても同様の入力ボックスを配置します ホームコンポーネントの入力ボックスに何かを入力し、その後、about コンポーネントに切り替え、その後、ホームコンポーネントに戻ると、以前に入力した内容がクリアされていることがわかります。実際、about コンポーネントに切り替えると、ホームコンポーネントが破棄され、入力ボックスの値が自然にクリアされることは簡単に理解できます。 ホームコンポーネントに破棄されたライフサイクル関数を記述しました about コンポーネントに切り替えると、home コンポーネントの destroy がトリガーされるため、home コンポーネントが破棄されます。 次に、keep-alive コンポーネントを使用して router-view コンポーネントをラップし、非アクティブなコンポーネントをキャッシュできます。 アプリのコンポーネント<テンプレート> <div id="アプリ"> <div id="nav"> <router-link to="/">ホーム</router-link> | <router-link to="/about">について</router-link> </div> <キープアライブ> <ルータービュー /> </キープアライブ> </div> </テンプレート> 書き終えると、about コンポーネントに切り替えたときに、home コンポーネントの destroy がトリガーされず、home コンポーネントの値も保存されていることがわかります。 しかし、これは明らかに良くありません。about コンポーネントの値もキャッシュされ、つまりすべてのルーティング コンポーネントがキャッシュされるため、パフォーマンスが大幅に低下し、要件を満たせません。ここでは、home コンポーネントのみをキャッシュします。 キープアライブには2つの特性がある 文字列または正規表現。一致するコンポーネントのみがキャッシュされます。
まず、include を使用してコンポーネントで定義された名前と一致させ、キャッシュします。 <キープアライブ include="home"> <ルータービュー /> </キープアライブ> ホームはキャッシュされているが、aboutはキャッシュされていないことがわかります。 excludeは除外することです。これは説明しませんが、非常に簡単です。これに加えて、ルートのメタ属性を使用して制御することもできます。 { パス: '/'、 名前: 'ホーム', メタ:{ キープアライブ:true }, コンポーネント: ホーム } ホームルーティングルールクロックのメタでkeepAlive属性をtrueに追加します。これは、現在のルーティングコンポーネントをキャッシュする必要があることを意味します。 keep-alive コードは v-if と組み合わせてラップすることができます。meta の keepAlive が true の場合はキャッシュされ、そうでない場合はキャッシュされません。これにより、より柔軟になります。 <キープアライブ> <router-view v-if="$route.meta.keepAlive" /> </キープアライブ> <ルータービュー v-if="!$route.meta.keepAlive" /> このようにコンポーネントのキャッシュは実装されていますが、まだいくつか問題があります。コンポーネントはキャッシュされており、破棄されていないため、切り替え時にコンポーネントが再作成されることはなく、当然、create などのライフサイクル関数も呼び出されません。そのため、現在のコンポーネントがアクティブかどうかを取得するには、activated と deactivated を使用する必要があります。 ホームコンポーネントにアクティブ化および非アクティブ化ライフサイクル関数を記述しました アクティブ化(){ console.log("ああ、私を見たんだね") console.log("----------アクティブ化されました--------") }, 非アクティブ化(){ console.log("嫌だ!!また出て行ったな") console.log("----------非アクティブ化---------") } 上の GIF からはっきりとわかると思います。この時点で、キープアライブはほぼ完了です。 要約するVue における keepAlive コンポーネントの役割と使い方についてはこれで終了です。Vue における keepAlive コンポーネントの使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: mysql5.5.28 のインストール チュートリアルは非常に詳細です。
最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...
目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...
mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと...
解決策はただ一つ、ソースを変更することです。 github からのソースは基本的にタイムアウトするの...
序文この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安...
MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...
このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...
目次1. 成果を達成する2. バックエンドの実装2.1 エンティティクラス2.2 データベース内のデ...
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...
フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...
「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...
1.VirtualBoxソフトウェアをダウンロードしてインストールするまず、VirtualBox の...
Vue でカスタム パス エイリアスを設定する方法日常の開発では、モジュールやコンポーネントをインポ...
<META http-equiv="Page-Enter" CONTENT...