## 親コンポーネントと子コンポーネントのライフ サイクル:
-
読み込みとレンダリングのフェーズ : 親の作成前 -> 親の作成 ->親 beforeMount -> 子 beforeCreate -> 子作成 -> 子 beforeMount -> 子マウント -> 親マウント
-
更新フェーズ : 親 beforeUpdate -> 子 beforeUpdate - > 子が更新されました -> 親が更新されました
-
破棄フェーズ : 親 beforeDestroy -> 子 beforeDestroy -> 子破棄 -> 親破棄
Vue.$nextTick
次の DOM 更新サイクルの後に遅延コールバックを実行します。データを変更した直後にこのメソッドを使用して、更新された DOM を取得します。
nextTick は Vue によって提供されるグローバル API です。Vue の非同期更新戦略により、データの変更は DOM に直接反映されません。現時点では、必要に応じて更新された DOM 状態をすぐに取得するには、このメソッドを使用する必要があります。
Vue は、DOM の更新時に非同期で実行されます。データが変更されると、Vue は非同期更新キューを開き、同じイベント ループ内で発生するすべてのデータ変更をバッファーに入れます。同じ watcher が複数回トリガーされた場合、キューにプッシュされるのは 1 回だけです。バッファリング中のこの重複排除は、不必要な計算や DOM 操作を回避するために重要です。 nextTick メソッドはコールバック関数をキューに追加し、前の DOM 操作が完了した後にのみ関数が呼び出されるようにします。
使用シナリオ:
##Vue インスタンスのマウント プロセス中に何が起こりますか?
マウント プロセスは app.mount() プロセスを参照します。これは初期化プロセスです。全体として 2 つのことを実行します: Initialization と 更新メカニズムを確立します。 初期化では、コンポーネント インスタンスが作成され、コンポーネントの状態が初期化され、さまざまな応答データが作成されます。 更新メカニズムを確立するこのステップでは、コンポーネントの更新関数がすぐに実行されます。これにより、コンポーネントのレンダリング関数が初めて実行され、patchConvert vnode##が実行されます。 # to dom ; 同時に、レンダリング関数を初めて実行すると、その内部応答データとコンポーネント更新関数の間に依存関係が作成され、将来データが変更されたときに、対応するアップデート機能が実行されます。
Vue のテンプレート コンパイル原理
Vue には compiler と呼ばれる独自のコンパイラ モジュールがあり、その主な機能はユーザーをコンパイルすることです。 #template は、js の実行可能な render 関数にコンパイルされます。 Vue では、コンパイラは最初に template を解析します。このステップは parse と呼ばれ、終了後に abstract と呼ばれる JS オブジェクトが取得されます。構文ツリー AST; 次に、 AST の深い処理の変換プロセスがあり、このステップは transform と呼ばれ、最後に以前に取得された AST は次のようになります。これも render 関数です。 Vue の応答性の原則
Vue 2 のデータ応答性は、データ型に応じて異なる方法で処理されます。オブジェクトの場合は、Object.defineProperty(obj,key,descriptor)- を通じてオブジェクト プロパティ アクセスをインターセプトします。データがアクセスまたは変更されると、感知して反応します。配列の場合は、配列プロトタイプを上書きします。 . メソッドを拡張し、7 つの変更メソッド (プッシュ、ポップ、シフト、アンシフト、スプライス、ソート、リバース) を拡張して、これらのメソッドが追加で更新通知を実行して応答できるようにします。
欠点:
初期化中の再帰的走査によりパフォーマンスが低下します。
通知更新プロセスでは、多数の - dep
インスタンスと ## を維持する必要があります。 #watcher- たとえば、多くの追加メモリを消費します;
オブジェクト プロパティの追加または削除はインターセプトできず、Vue.set や delete などの API が必要です- 有効にします;
ES6 で新しく生成された Map- および
Set データ構造はサポートされていません。
Vue 3 は、 ES6 の - Proxy
メカニズムを使用して、応答性が必要なデータをプロキシします。オブジェクトと配列を同時にサポートできます。動的な属性の追加と削除はインターセプトできます。すべての新しいデータ構造がサポートされています。オブジェクトのネストされた属性は実行時に再帰的であり、使用されるときのみプロキシされます。特に大規模な属性を維持する必要はありません。依存関係の数が減り、パフォーマンスが大幅に向上しました。大きな進歩です。
仮想 DOM
概念: 仮想 DOM は、名前が示すように、仮想 DOM オブジェクトです。 、それ自体は JS オブジェクトであり、さまざまな属性を通じてビュー構造を記述するだけです。
仮想 DOM の利点: (1) パフォーマンスの向上 DOM を直接操作するには制限があります。実際の要素には多くの属性があります。直接操作すると、 will 多くの余分な属性コンテンツが操作されますが、これは不必要です。これらの操作が JS オブジェクトに転送されると、はるかに簡単になります。さらに、DOM の操作には比較的コストがかかり、DOM 操作が頻繁に行われると、ページの再描画やリフローが簡単に発生する可能性があります。中間処理が抽象 VNode を通じて実行される場合、直接 DOM 操作の数が効果的に削減され、それによってページの再描画とリフローが削減されます。 (2) 便利なクロスプラットフォーム実装 同じ VNode ノードを、異なるプラットフォーム上の対応するコンテンツにレンダリングできます。例: ブラウザーでレンダリングされる場合、それは DOM 要素ノードであり、ネイティブでレンダリングされる場合 ( iOS、Android)対応コントロールとなります。 Vue 3 を使用すると、開発者は VNode に基づいてカスタム レンダラーを実装し、さまざまなプラットフォームでのレンダリングを容易にすることができます。
構造: 統一された標準はなく、通常は tag 、props 、children## が含まれます。 # 3 つのアイテム。 タグ: 必須。これはラベルである場合もあれば、コンポーネントや関数である場合もあります。 props: オプション。このラベルのプロパティとメソッドです。 children: オプション。これは、このタグのコンテンツまたは子ノードです。テキスト ノードの場合は文字列、子ノードがある場合は配列です。つまり、 children が文字列であると判断された場合、それはテキスト ノードである必要があり、このノードには子要素があってはいけないことを意味します。
diff アルゴリズム
1. 概念:
diffアルゴリズムは比較アルゴリズムでは、古い仮想 DOM と新しい仮想 DOM を比較することで、どの仮想ノードが変更されたかを知ることができます。この仮想ノードを見つけて、他の変更されていないノードは更新せずに、この仮想ノードに対応する実ノードのみを更新します。正確に更新するノード実際の DOM を使用できるため、効率が向上します。
2. 比較方法:
diffアルゴリズムの全体的な戦略は次のとおりです: 深さ優先、同じレイヤーの比較。比較は同じレベルでのみ実行され、レベル間では比較されません。比較プロセス中に、ループは両側から中央まで縮小します。
まず、2 つのノードの - tag
が同じかどうかを確認し、異なる場合はノードを削除し、ノードを再作成して置き換えます。
- tag
同じ場合は、まず属性を置き換えてから、サブ要素を比較します。これらの要素は、次の状況に分けられます。新しいノードにサブ要素がある場合は、ダブル ポインター方法が比較に使用されます。新旧の先頭ポインタと末尾ポインタを比較し、中央に近づくようにループし、状況に応じて patchVnode を呼び出し、- patch
プロセスを繰り返し、 createElem を呼び出して作成します新しいノードを作成し、ハッシュ テーブルから新しいノードを作成します。 key の一貫した VNode ノードを見つけて、状況に応じて操作します。 新しいノードには子要素があり、古いノードには子要素がありません。子要素の仮想ノードを実ノードに変換して挿入するだけです。
新しいノードには子要素がなく、古いノードには子要素がある場合、子要素はクリアされ、新しいノードのテキスト コンテンツに設定されます。 - 古いノードと新しいノードに子要素がない場合、つまり両方がテキスト ノードである場合、テキストの内容が直接比較され、異なる場合は更新されます。
-
-
#Vue におけるキーの役割は何ですか?
key は主に、仮想 DOM をより効率的に 更新するために使用されます。 Vue が 2 つのノードが同じかどうかを判断する場合、主に 2 つのノードの key と 要素タイプ tag を判断します。したがって、 key が設定されていない場合、その値は未定義であり、これらは常に 2 つの同一のノードであるとみなされ、更新操作のみが実行できるため、大量の DOM 更新操作が発生します。 。 コンポーネント内のデータが関数であるのはなぜですか?
new Vue() では、ルート インスタンスが 1 つしかなく、データ汚染が発生しないため、関数またはオブジェクトにすることができます。 コンポーネントでは、データは関数である必要があります。その目的は、複数のコンポーネント インスタンス オブジェクトが同じデータを共有してデータ汚染を引き起こすことを防ぐことです。関数の形式では、ファクトリ関数として返されます。 initData が使用される場合、まったく新しいデータ オブジェクト。
Vue でコンポーネント間で通信するにはどうすればよいですか?
親コンポーネントと子コンポーネント間の通信:
v-show と v-if の違いは何ですか?
- #制御方法が異なります。
v-show は、CSS 属性 display: none を要素に追加することによって行われますが、要素はまだ存在します。一方、 v-if は、要素の表示または非表示を制御します。要素全体を変更して要素を追加または削除します。
#コンパイルプロセスが異なります。 - v-if
切り替えには部分的なコンパイル/アンインストール プロセスがあります。切り替えプロセス中に、内部イベント リスナーとサブコンポーネントが適切に破棄され、再構築されます。v-show は単なる単純な CSS です。 -ベースの切り替え。
#コンパイル条件が異なります。 v-if- は、真の条件付きレンダリングです。条件付きブロック内のイベント リスナーとサブコンポーネントが、切り替えプロセス中に適切に破棄され、再構築されることが保証されます。レンダリング条件が false の場合、操作は実行されるまで実行されません。真実のためにレンダリングします。
#トリガーのライフサイクルが異なります。 v-show false から true に変更する場合、コンポーネントのライフサイクルはトリガーされません; - v-if
false から true に変更する場合、コンポーネントの beforeCreate# #、 created、 beforeMount、 mounted フックは、から変更するときにコンポーネントの beforeDestory、 destoryed# をトリガーします。 true から false。##フック。
パフォーマンスの消費は異なります。 v-if はスイッチング コストが高く、 v-show は初期レンダリング コストが高くなります。 -
使用シナリオ: 非常に頻繁に切り替える必要がある場合は、 v-show を使用することをお勧めします。たとえば、アコーディオン メニュー、タブ ページ、等。;
実行時に条件がほとんど変化しない場合は、 v-if を使用することをお勧めします。たとえば、ユーザーがログインした後、異なる権限に応じて異なるコンテンツが表示されます。
computed と watch の違いは何ですか?
computed計算されたプロパティは、他のプロパティに依存して値を計算します。内部依存関係が変更されると関数が再実行されます。計算されたプロパティはキャッシュされ、複数回再利用できます。属性を計算するとき、戻り値はキャッシュから取得されます。計算された属性には return キーワードが必要です。
-
watch 特定のデータの変更をリッスンして関数をトリガーします。データがオブジェクト型の場合、オブジェクトの属性値が変更されたときにディープ リスニング deep 属性を使用する必要があります。また、ページが変更されたときに即時リスニング immdiate- 属性を使用することもできます。が最初にロードされます。
アプリケーション シナリオ: 計算されたプロパティは通常、テンプレートのレンダリングで使用されます。特定の値は他の応答オブジェクトや計算されたプロパティに依存しますが、リスニング プロパティは特定の値を観察するのに適しています。複雑なビジネス ロジックを完成させます。
v-if と v-for を一緒に使用することが推奨されないのはなぜですか?
Vue 2 では、 v-for は v-if よりも高い優先順位を持っています。つまり、v-if は繰り返し実行されます。各 v-for ループで実行します。走査される配列が大きく、表示される実際のデータが非常に小さい場合、パフォーマンスが大幅に無駄になります。 Vue 3 では、まったく逆です。v-if は v-for よりも優先度が高いため、 v-if## の場合、 # が実行されると、呼び出される変数はまだ存在しないため、例外が発生します。 通常、この問題が発生する状況は 2 つあります。 リスト内の項目をフィルタリングするには、たとえば次のようにします。 v-for = "user in users" v -if = "user.active" 。この場合、計算されたプロパティを定義して、フィルター処理されたリストを返すことができます。
非表示にする必要があるリストのレンダリングを避けるため (例: v-for = "user in users" v-if = "showUsersFlag")。この場合、- v-if
をコンテナ要素に移動するか、 template のレイヤーでラップすることができます。 -
#$set
レスポンシブ データを手動で追加して、データ変更ビューが更新されない問題を解決できます。配列内の項目の値を直接設定するか、プロジェクト内のオブジェクトのプロパティの値を直接設定すると、ページが更新されないことがわかります。これは、データの変更を監視できない Object.defineProperty() の制限によるもので、 this.$set(array or object, array subscript or object’s property name, updated value ) を使用できます。 ###解決する。
キープアライブとは何ですか?
- 機能: コンポーネントのキャッシュを実装し、コンポーネントのステータスを維持し、レンダリングの繰り返しによって引き起こされるパフォーマンスの問題を回避します。
- 動作原理: Vue.js は内部的に DOM ノードを個々の VNode ノードに抽象化します。
keep-alive コンポーネントのキャッシュも VNode ノードに基づいています。条件を満たすコンポーネントをキャッシュオブジェクトにキャッシュし、再レンダリング時にはキャッシュオブジェクトからVNodeノードを取り出してレンダリングします。
- 次の属性を設定できます:
① include : 文字列または通常。一致する名前を持つコンポーネントのみがキャッシュされます。 ② exclude : 文字列または正規表現、名前が一致するコンポーネントはキャッシュされません。 ③ max : 数値、キャッシュできるコンポーネント インスタンスの最大数。 マッチングでは、最初にコンポーネントの name オプションがチェックされます。name オプションが使用できない場合は、そのローカル登録名 (親コンポーネントのコンポーネント オプションのキー値) と一致します。匿名コンポーネントは一致できません。
キャッシュされた keep-alive を持つコンポーネントには、さらに 2 つのライフサイクル フック (activated 、deactivated ) が含まれます。 初めてコンポーネントに入る場合: beforeCreate --> created -->beforeMount -->mounted -->activated -->gt; beforeUpdate --> updated -->deactivated コンポーネントをもう一度入力してください。これは、Vue コンポーネントで再利用可能な機能を配布するための非常に柔軟な方法を提供します。
使用シナリオ: いくつかの同一または類似のコードが異なるコンポーネントで使用されることが多く、これらのコードの機能は比較的独立しています。同じまたは類似のコードは、ミックスインを通じて抽出できます。 欠点:
不明瞭な変数ソース
複数のミックスインにより名前の競合が発生する可能性があります (解決策: Vue 3 Combination API)
slot を通じてこの位置を占有することができます。この位置の要素は、親コンポーネントからコンテンツの形式で渡す必要があります。 slot は次のように分割されます:
##Default slot : サブコンポーネントは <slot> タグを使用してレンダリング位置を決定し、ラベル You DOM 構造をバックアップ コンテンツとして内部に配置できます。親コンポーネントが使用されている場合、子コンポーネントのタグにコンテンツを直接書き込むことができ、コンテンツのこの部分が ## に挿入されます。子コンポーネントの #<slot> タグの位置。コンテンツをスロットに渡さずに親コンポーネントが使用される場合、バッキング コンテンツがページに表示されます。
-
名前付きスロット : サブコンポーネントは、name 属性を使用してスロットの名前を表します。スロットで name が指定されていない場合、非表示になります。含まれる名前は default です。親コンポーネントで使用される場合、 v-slot- ディレクティブは、デフォルトのスロットに基づいて要素を配置する必要があるスロットを指定するために使用されます。子コンポーネントのスロット番号 ##name
属性値。 v-slot ディレクティブを使用して、要素を配置するスロットを指定します。このディレクティブは、 要素と 1 つの に一致する必要があります。要素は予約スロットにのみ対応できます。つまり、複数の 要素は、 v-slot ディレクティブを使用して同じスロットを指定できません。 v-slot の省略形は # です。たとえば、 v-slot:header は #header と省略できます。 スコープ スロット: サブコンポーネントは、 <slot> タグの props データをバインドして、親コンポーネントによって使用されるサブコンポーネント データを渡します。 。親コンポーネントがスロット バインディング プロパティ データを取得するためのメソッド:
scope="受信した変数名":
-
# スロットスコープ="受信した変数名": <テンプレート スロットスコープ="受信した変数名">
#v-slot: スロット名="受信した変数名": <テンプレート v-slot: スロット名="受信した変数名">
-
#Vue の修飾子とは何ですか?
Vue では、修飾子が DOM イベントの多くの詳細を処理するため、これらの面倒な処理に多くの時間を費やす必要がなくなり、より多くのエネルギーをプログラムに集中できるようになります。処理。 Vue のモディファイアは次のタイプに分類されます:
フォーム修飾子
lazy 情報を入力した後、カーソルがラベルから離れたときのみ値が value に割り当てられます。つまり、change 情報の同期はイベント後に実行されます。
number ユーザー入力値を数値型に自動的に変換しますが、値が parseFloat で解析できない場合は、元の値が返されます。
trim ユーザーが入力した最初と最後のスペースは自動的にフィルターされますが、中間のスペースはフィルターされません。
イベント修飾子
stop はイベントのバブリングを防止します。これは、event.stopPropagation メソッドを呼び出すのと同じです。
prevent イベントのデフォルトの動作を防止します。これは、event.preventDefault メソッドを呼び出すことと同じです。
self ハンドラー関数は、event.target が現在の要素自体である場合にのみトリガーされます。
once イベントがバインドされた後、トリガーできるのは 1 回のみで、2 回目はトリガーされません。
capture イベント キャプチャ モードを使用します。つまり、要素自体によってトリガーされたイベントが最初にここで処理され、次に内部要素に渡されて処理されます。
passive イベントのデフォルトの動作をブロックしたくないことをブラウザーに伝えます。
native コンポーネントが html 組み込みタグのようなルート要素のネイティブ イベントをリッスンできるようにします。それ以外の場合は、コンポーネントはカスタム イベントのみをリッスンします。
マウス ボタン修飾子左 左クリック。 right 右クリックします。 middle 中クリックします。
キー値修飾子- キーボード修飾子は、キーボード イベント (
onkeyup 、onkeydown ) を変更するために使用されます。 keyCode たくさんありますが、vue は次の 2 種類に分けられるエイリアスを提供します。
共通キー (Enter、Tab) 、delete、space、esc、up...)
- システム修飾キー (ctrl、alt、meta、shift...)
-
#はい、SPA について理解していますか?
コンセプト: SPA (Single-page application) 、つまりネットワークアプリケーションのモデルであるシングルページアプリケーションまたは Web サイト では、現在のページを動的に書き換えることによってユーザーと対話します。この方法により、ページ間の切り替え時にユーザー エクスペリエンスが中断されることが回避されます。 SPA では、単一ページのロードを通じて必要なすべてのコード (HTML、JavaScript、CSS) が取得されるか、適切なリソースが動的にロードされ、必要に応じて (通常はユーザーのアクションに応じて) ページに追加されます。 )。ページはどの時点でもリロードされず、制御が他のページに転送されることもありません。例えば、カップのように、朝はミルク、昼はコーヒー、午後は紅茶が入っていて、常に中身が入っていてカップは変化しません。
- SPA
と MPA の違い: MPA (複数ページ アプリケーション) 、つまり、複数ページのアプリケーション。 MPA では、各ページがメイン ページで独立しており、ページにアクセスするたびに Html、CSS、JS ファイルを再読み込みする必要があり、公開ファイルはオンデマンドで読み込まれます。
SPA
| MPA |
|
# 構成
1 つのメイン ページと複数のページ フラグメント | 複数のメイン ページ |
| URL モード
ハッシュ モード | 履歴モード |
##SEO 検索エンジン最適化 | ##実装は難しいが、SSR 手法を使用すると改善可能 ##実装は簡単
| #データ転送 | 簡単 | URL、Cookie、localStorageなどを介して転送します。
| ページ切り替え | 高速、優れたユーザー エクスペリエンス | 読み込みリソースの切り替え、低速、ユーザー エクスペリエンスが悪い
| メンテナンス コスト | 比較的簡単 | 比較的複雑
|
-
SPA 長所と短所: 長所:
- は、デスクトップ アプリケーションの即時性、Web サイトの移植性、およびアクセシビリティを備えています。
- ユーザー エクスペリエンスは優れており、高速であり、コンテンツの変更にページ全体をリロードする必要はありません。
- フロントエンドとバックエンドが適切に分離され、分業が明確になります。
欠点:
- 検索エンジンのクロールに適さない
- 最初のレンダリング速度が比較的遅い
双方向バインディング?
コンセプト: Vue の双方向バインディングは、応答性の高いデータをビューにバインドできるディレクティブ v-model です。ビューの変更により、この値が変更される場合があります。 v-model は糖衣構文です。デフォルトでは、:value および @input と同等です。v-model を使用すると、開発効率を向上させるためのイベント処理コード。
使用法: 通常はフォーム項目 v-model で使用されますが、特定の値の入出力を表すカスタム コンポーネントでも使用できます。コントロール。
原則:
v-model は命令です。双方向バインディングは実際には Vue コンパイラによって行われ、出力には v が含まれます-model テンプレートのコンポーネント レンダリング関数は、実際には value 属性と input イベント モニタリングのバインディングです。対応する変数更新操作はイベント コールバックで実行されます。関数。
# 子コンポーネントは親コンポーネントのデータを直接変更できますか?
すべての prop は単一のバインディング原則に従い、親コンポーネントの更新により props が変更され、自然に新規になります。状態は、逆方向ではなく、子コンポーネントに流れます。これにより、子コンポーネントが親コンポーネントの状態を誤って変更することが防止されます。変更しないと、アプリケーションのデータ フローが混乱し、理解が困難になりやすくなります。 さらに、親コンポーネントが更新されるたびに、すべての子コンポーネントの props が最新の値に更新されます。つまり、 prop## は、子コンポーネント。 # これを実行すると、Vue はコンソールに警告をスローします。
- 実際の開発プロセスでは、通常、
prop の変更が必要となる 2 つのシナリオがあります:
- prop
が使用されます。初期値が渡され、子コンポーネントが後でそれをローカル データ プロパティとして使用する必要があるためです。この場合、新しいローカル データ属性を定義し、 props から初期値を取得するのが最善です。
受信した - prop
値をさらに変換する必要があります。 prop 値に基づいて計算プロパティを定義する方がよいでしょう。
- 実際には、親コンポーネントのプロパティを本当に変更したい場合は、
イベントを発行して親コンポーネントを変更する必要があります。オブジェクトまたは配列が props として渡される場合、子コンポーネントは props バインディングを変更できませんが、オブジェクトまたは配列内の値を 変更することはできます。これは、JS のオブジェクトや配列が参照渡しされるためであり、Vue の場合、そのような変更を禁止することは可能ですが、大幅なパフォーマンスの低下が発生し、利益の方が大きいためです。
#Vue Router の一般的なルーティング モードと原則は何ですか?
1. ハッシュ モード:
location.hash の値は、URL の # 以降の値です。その特徴は、ハッシュは URL に表示されますが、HTTP リクエストには含まれず、バックエンドにはまったく影響を与えないため、ハッシュを変更してもページはリロードされません。 -
ハッシュ変更のリスニング イベントを追加できます window.addEventListener("hashchange", funcRef, false) 、変更されるたびに- hash (window.location.hash)
, ブラウザのアクセス履歴にレコードを追加します. 上記のハッシュの特性を利用すると、 フロントエンドルーティングでビューは更新するがページの再リクエストは行わない機能を実現できます 機能: 互換性は良好ですが、美しくはありません
2. 履歴モード:
HTML5 履歴インターフェイスで新しい pushState()## を使用します。 replaceState() メソッド。 これら 2 つのメソッドは、ブラウザの履歴スタックに適用されます。現在存在する back、 forward 、go に基づいて、履歴を変更する機能を提供します。記録が追加されました。 これら 2 つのメソッドには共通点が 1 つあります。ブラウザ履歴スタックを変更するために呼び出された場合、現在の URL が変更されていても、ブラウザはページを更新しません。これにより、「ビューは更新されるが更新されない」という問題が発生します。シングルページ アプリケーションのフロントエンド ルーティング用のビュー」。「再リクエスト ページ」は、基本的な 機能を提供します。美しいですが、更新時に 404 が表示され、バックエンド構成が必要です。 <h3 data-id="heading-25"><strong>動的ルーティング? </strong></h3>
<p>特定の一致パターンのルートを同じコンポーネントにマップする必要がある場合が多く、この場合は動的ルーティングを定義する必要があります。たとえば、異なる ID を持つすべてのユーザーをレンダリングするために使用する必要がある User コンポーネントがあります。次に、vue-router のルーティング パスで <code>動的パス パラメーター (動的セグメント) を使用して、この効果を実現できます: {path: '/user/:id', compenent: User} 、:id は動的パス パラメーターです。
Vuex について理解していますか?
コンセプト: Vuex は、Vue 専用の状態管理ライブラリです。アプリケーションの状態をグローバルな方法で集中管理し、対応するルールを使用して、状態は信頼性の高い方法で維持され、予測の方法は変化します。
解決された問題: Vuex が解決する主な問題は、複数のコンポーネント間の状態共有です。状態共有はさまざまな通信方法を使用して実現することもできますが、多くの場合、複数のコンポーネント間で状態の一貫性を維持する必要があるため、このモデルでは問題が発生しやすく、プログラム ロジックが複雑になります。 Vuex は、コンポーネントの共有状態を抽出し、グローバル シングルトン モードで管理するため、どのコンポーネントでも一貫した方法で状態を取得および変更できます。また、レスポンシブ データにより、シンプルな一方向フローが保証され、コードがより効率的になります。メンテナンスが簡単です。
使用する場合: Vuex は必須ではありません。状態を管理できますが、より多くの概念とフレームワークももたらします。大規模な単一ページ アプリケーションを開発する予定がない場合、またはアプリケーション内で維持するグローバル状態が大量にない場合は、Vuex を使用する必要はなく、単純なストア モードで十分です。それ以外の場合は、Vuex を選択するのが自然でしょう。
使用法: Vuex は、グローバル状態を state オブジェクトに置きます。このオブジェクト自体は状態ツリーであり、store## はインスタンスの #state はこれらの状態にアクセスし、一致する mutation メソッドを使用してこれらの状態を変更し、状態の変更には mutation のみを使用できます。そしてコンポーネント #commit Method submitmutation の ## を呼び出します。アプリケーションに非同期操作や複雑な論理の組み合わせがある場合は、action を記述する必要があります。実行後、状態の変更がある場合でも、mutation を送信する必要があります。コンポーネントは、dispatch を通じて action をディスパッチします。最後のステップはモジュール化です。modules オプションを使用して、分割されたサブモジュールを整理します。状態にアクセスするときは、サブモジュールの名前を追加する必要があります。サブモジュールに ## 設定がある場合は、 #namespace の場合、 mutation を送信して action をディスパッチするときに、追加の名前空間プレフィックスが必要になります。
ページの更新後に Vuex 状態が失われる問題を解決するにはどうすればよいですか?
Vuex は状態をメモリに保存するだけで、更新すると失われます。永続化したい場合は保存する必要があります。
localStorage は非常に適しています。mutation を送信すると、 localStorage に保存され、値は store で取得されます。 これを state の初期値として使用します。 サードパーティのプラグインを使用することもできます。 vuex-persist プラグインを使用することをお勧めします。これは Vuex 永続ストレージ用のプラグインであり、必要ありませんstorage には手動でアクセスできますが、状態は cookie または localStorage に直接保存されます。 Vue SSR について理解しましたか?
SSR は Server Side Render (サーバー サイド レンダー) で、Vue がタグを HTML にレンダリングする作業をクライアント側で完了します。サーバー側で実行し、HTML をクライアントに直接返します。
- 利点:
SEO が向上し、最初の画面の読み込みが速くなります。
- 短所:
開発条件が限定される. サーバーサイドレンダリングは beforeCreate と created の 2 つのフックのみをサポートします. 外部拡張ライブラリが必要な場合は特別な処理が必要です. サーバーサイドレンダリングアプリケーションにも必要があります. Node..js 実行環境にいること。サーバーにはより大きな負荷要件が必要になります。
Vue のパフォーマンス最適化手法について何を知っていますか?
- ルートの遅延読み込み。アプリケーションのサイズを効果的に分割し、アクセス時に非同期でロードします。
-
キープアライブ ページをキャッシュします。コンポーネント インスタンスの重複作成を回避し、キャッシュされたコンポーネントの状態を保持します。
-
v-for Traversal は、v-if を同時に使用することを避けます。実際、Vue 3 ではすでに間違った使用法になっています。
- ロングリストのパフォーマンス最適化、仮想リストを使用できます。
-
v-once 。変更されなくなったデータには v-once を使用します。
- イベントの破棄。コンポーネントが破棄されると、グローバル変数とタイマーも破棄されます。
- 画像は遅延ロードされます。
- サードパーティのプラグインはオンデマンドで導入されます。
- サブコンポーネントの分割。より重い状態のコンポーネントは分割に適しています。
- サーバー側のレンダリング。
(学習ビデオ共有: vuejs 入門チュートリアル 、基本プログラミング ビデオ )
|