ホームページ > 記事 > ウェブフロントエンド > [編集と共有] Vue で頻繁に聞かれる面接の質問の一部
今回は、基本的な知識を整理し、Vue の知識の蓄えを強化するために、Vue に関する面接でよくある質問をいくつか紹介します。収集する価値はありますので、ぜひ見てください。
# 私が共有するのは、Vue の面接でよくある質問の一部ですが、すべてを表しているわけではありません。記事に何か問題がある場合は、ご指摘ください。疑問がある場合や、面接に関するその他の質問がある場合は、コメント エリアにメッセージを残して共有することもできます。一緒に話し合いましょう。ありがとうございます!
親子コンポーネント通信: props
および event
、v-
モデル
、.sync
、ref
、$parent
および
$子供たち
。 (学習ビデオ共有: vue ビデオ チュートリアル)
親子コンポーネント以外の通信: $attr
および $listeners
、
provide
と inject
、eventbus
、ルート インスタンス $root
、vuex
、dispatch# を介したアクセス## そして
brodcast
v-model は、フォーム コントロールまたはコンポーネントに双方向バインディングを作成するために使用されます。
本質は、
v-bind と
v-on の糖衣構文です。
v-model がコンポーネントで使用されている場合、
value という名前のコンポーネントがデフォルトでコンポーネントにバインドされます。
prop と
input という名前のイベント。
v-model は
modelValue を渡すことと同じです。
prop を実行し、スローされた
update:modelValue event
Vuex とグローバル オブジェクトの間には 2 つの主な違いがあります:
Vuex の状態ストレージは応答性があります。 Vue コンポーネントがストアから状態を読み取るとき、ストアが のステータス 化すると、対応するコンポーネントがそれに応じて効率的に更新されます。
レンダリング プロセス: 親コンポーネントは、親コンポーネントとみなされる前に、すべての子コンポーネントがマウントされた後にのみマウントする必要があります。 マウントが完了したため、子コンポーネントがマウントされた後に親コンポーネントがマウントされます。
beforeCreate ->parentcreated ->beforeMount ->childbeforeCreate ->gt; サブ作成 -> subbeforeMount -> サブマウント -> 親マウントサブコンポーネント更新プロセス:
サブコンポーネントに影響します: ⼗更新前 -> ⼖更新前 -> ⼼更新済み -> ⼗ updated
◗beforeDestroy -> ⼗beforeDestroy -> ⼖ destroy -> Parentdestroyed は見た目がたくさんあるので覚えるのが難しいですが、実際には、それを理解していれば、状況に関係なく、親コンポーネントがサブコンポーネントを待っている必要があります。完了します。 完了した後でのみ、対応する完了フックが実行されるため、覚えやすくなります
5. v-show と v-if の違いは何ですか? は、切り替えプロセス中に 条件付きブロックのイベント リスナーとサブコンポーネントを破棄して再構築します。初期条件が false の場合、条件が初めて true になるまでは何も行われません。
染色モジュール。
css に基づいて切り替えるだけです
すべてがレンダリングされます。
v-show はレンダリングの初期化にコストがかかります。
頻繁に切り替える必要がある場合、または切り替えられる DOM の部分が非常に複雑な場合は、
v-show を使用するのが大きく、
の方が適しています。
適切な。レンダリング後に切り替えることがほとんどない場合は、v-if を使用する方が適切です。
6. Vue の v-html はどのような問題を引き起こしますか?
key
は、各 vnode
に割り当てられた一意の id
です。
vnode
diff プロセス中に、key
を簡単に比較して、
それらが同じノードであるかどうか、および key
の一意性を使用して map
を生成し、より高速に取得できます。
対応するノードを取得します。
さらに key
を指定すると、「インプレース再利用」戦略は使用されなくなり、レンダリングの精度を確保できます。
。
v-for
と v-if
同じノード内の場合、 v-
for
は v-if
よりも優先度が高く、v-if
が個別に繰り返されることを意味します
すべての v-for
ループで実行されます。走査される配列が非常に大きいが、表示される実際のデータが非常に小さい場合
多くのパフォーマンスの無駄が発生します。 computed
を使用してデータをフィルター処理することをお勧めします。 #違い:
# 後続のハッシュ値が変更されても、ブラウザはサーバーにリクエストを送信しません。リクエストを送信していない
要求された場合、ページは更新されません。同時に、ハッシュチェンジ イベントをリッスンすることで、ハッシュにどのような変更が発生したかを知ることができ、それに基づいて
ハッシュ変更を使用して、ページ上のコンテンツの一部を更新する操作を実装します。
履歴モードの実装は、主に HTML5 標準によってリリースされた 2 つの API、pushState
と
replaceState
、これら 2 つの API は URL を変更できますが、リクエストは送信しません。こうすることで監視できるようになります
URL の変更をリッスンして、ページ上のコンテンツの一部を更新します。
Model-View-ViewModel
の略称、つまり MVC
です。
Controller
は ViewModel
に進化します。 プロセスは次のように要約されます:
1.コンポーネントが初期化されると、computed
と data
がそれぞれ確立されます。
自己応答システム Observer
は、data
の各属性設定をスキャンします。
get/set
データ インターセプト
2. 初期化 computed
は initComputed
関数
を呼び出します。 watcher
インスタンスを登録し、内部で Dep
メッセージをインスタンス化します。
情報サブスクライバーは、後続のコレクションの依存関係 (レンダリング関数の watcher
や、
変更されました watcher
)
計算されたプロパティが呼び出されると、その Object.defineProperty
がトリガーされます
get
アクセサ関数
watcher.depend()
メソッドを独自のメッセージ サブスクライバに呼び出します
dep
他のプロパティを watcher
に追加します。 watcher
##evaluate# を呼び出します。 ## メソッド (呼び出すため)
watcher
の get
メソッド) 自身を他の watcher
のメッセージ サブスクライバーのサブスクライバーにするには、まず watcher
を に割り当てます。 Dep.target
、その後
getter
評価関数実行後、評価関数内のプロパティ(如来自己など)にアクセスする際
data
、 props
またはその他の computed
)、
get
アクセサー関数も起動され、それによって計算されたプロパティの watcher
が評価関数のプロパティの watcher
のメッセージ サブスクライバー## に追加されます。 dep、これらの場合
操作が完了したら、最後に
Dep.target を閉じて
null に割り当て、
評価関数の結果を返します。
dep の
notify メソッドを何度も繰り返す
すべてのサブスクライバ
wathcer の
subs 配列が現在の dep に保存され、1 つずつ保存されます。
watcher の
update メソッドを呼び出します。
メソッドを使用して応答の更新を完了します。
15. Vue の応答原則
Vue の応答性は、
Object.defineProperty をハイジャックし、それを
Observer パターンと組み合わせるというものです。 ###実装。 Vue は Object.defineProperty を使用して getter
と setter
に変換します。
Vue の各コンポーネント インスタンスは、コンポーネントのレンダリング中に使用される watcher
インスタンスに対応します。
プロセス中に、使用された
データ プロパティは、setter
が起動すると、
いつ watcher
に通知され、関連するコンポーネントが再レンダリングされます。
16. Object.defineProperty の欠点は何ですか? のみをハイジャックできますが、Proxy
は直接 プロキシ オブジェクト原因
Object.defineProperty
ハイジャックできるのはプロパティのみであり、オブジェクトの各プロパティを走査する必要があります。そして
プロキシはオブジェクトを直接プロキシできます。
、Object.defineProperty
はオブジェクトのプロパティをハイジャックするため、
したがって、属性を追加するときは、オブジェクトを再度スキャンして、新しい属性を追加する必要があります。
プロパティを追加し、Object.defineProperty
を使用してハイジャックします。このような理由から、
Vue が data
の配列またはオブジェクトに属性を追加するときは、vm.$set
を使用する必要があります。
新しく追加された属性も応答することを確認してください。
操作をサポートしています。
defineProperty
にはありません。 新しい標準のパフォーマンス ボーナス プロキシ 新しい標準として、長期的には、JS エンジンは最適化され続けます。
と setter
は基本的にターゲットにされなくなります
性的な最適化。
は完全にはサポートされていません。
インターセプト メソッドを使用した Polyfill ソリューション
属性では、プロトタイプ チェーン
メカニズムにより、対応する
私はその方法を探し続けるつもりはありません。コンパイル方法には、インデックスを増やすいくつかのメソッドが含まれます (push
、
unshift、splice
) を手動で観察します。 18. nextTick は何に使用され、その原理は何ですか?
nextTick
マイクロタスクの実装では、まずサポートされているかどうかを確認します。
Promise
、サポートされていない場合は、マクロタスクを直接指し、マクロタスクの実装が最初にチェックされます。
setImmediate
(IE および Etage の上位バージョンでサポート) をサポートしているかどうかをテストします。サポートされていない場合は、サポートされているかどうかを確認します。
MessageChannel をサポートします。まだサポートされていない場合は、最終的に setTimeout
0; v-on
など) の使用を強制します。 Note: nextTick
のコールバック関数を一度配列に入れる理由
nextTick
でコールバック関数を直接実行するのではなく、同じティック内で複数の呼び出しを確実に実行できるようにするためです。
今回 nextTcik
を実行すると、複数の非同期タスクは起動されませんが、これらの非同期タスクは 1 つの同時タスクに圧縮されます。
ステップタスクは次のティック内に実行されます。
vue テンプレートのコンパイル プロセスは 3 つの段階に分かれています:
テンプレート文字列を解析して AST を生成します。生成される AST 要素ノードは合計 3 種類あり、1 つは通常の要素、2 は通常の要素です。 式 3 はプレーンテキストです。
Vue テンプレート内のすべてのデータが応答するわけではなく、応答後に表示されないデータも多数あります。最初にレンダリングされ、変更され、その後 データのこの部分によって生成される DOM は変更されないため、パッチ プロセス中の比較を省略できます。
このステージでは、生成された AST ツリーを深く調べて、その各サブツリーが静的ノードであるかどうかを検出します。静的ノードの場合は、 生成される DOM を変更する必要はなく、実行時のテンプレートの更新が大幅に最適化されます。
1. コードを生成する
const code = generate(ast, options)
generate メソッドを使用して、ast からレンダリング関数を生成します。
Vue3.x は、Object.defineProperty の代わりに Proxy
を使用します。プロキシは直接監視できるため、
オブジェクトと配列に変更があり、13 ものインターセプト メソッドが存在します。また、新しい標準として、ブラウザのメーカーによる継続的なパフォーマンスの最適化の対象となります。
変化。
Proxy はオブジェクトの最初のレイヤーのみをプロキシしますが、Vue3 はこの問題をどのように処理するのでしょうか?
Reflect.get の現在の戻り値が Object であるかどうかを確認します。オブジェクトである場合は、プロキシとして reactive メソッドを使用します。 このようにして、深い観察が実現されます。
配列を監視する場合、get/set が複数回トリガーされる可能性があります。複数のトリガーを防ぐにはどうすればよいでしょうか?
キーが現在のプロキシ オブジェクト ターゲット自体の属性であるか、古い値と新しい値が等しいかどうかを判断できます。 上記 2 つの条件のいずれかが満たされた場合にのみ、トリガーを実行できます。
エンコーディング段階
SEO 最適化
##プリレンダリング圧縮コード
ツリーシェイキング/スコープホイスティング#スケルトン画面
PWA基本プログラミング ビデオ
)以上が[編集と共有] Vue で頻繁に聞かれる面接の質問の一部の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。