人の人生には必ず浮き沈みがあります。常に日の出のように昇るわけではありませんし、常に惨めな状態になるわけでもありません。アップダウンの繰り返しが人間の修行となる。したがって、上に浮いている人は誇る必要はありませんし、下に沈んでいる人は悲観する必要はありません。私たちは率直かつ謙虚、楽観的かつ進取的であり、前進しなければなりません。——松下幸之助
こんにちは、私の名前はジャン・チェンです。今日のインターネット環境では、誰もが多かれ少なかれ感じているはずです。この衝動的な社会において、常に自分の人格を維持することによってのみ、人はさまざまな利益を認識し、お互いを励まし合うことができます。
2023 年の最新の面接質問を集めたので、常に準備してください。
この記事は、WeChat パブリック アカウントで最初に公開されました: Wild Programmer Jiang Chen
誰でも「いいね!」「収集」「フォロー」大歓迎です
記事一覧
- 2023 年のフロントエンド面接の質問 - JS
- 2023 年のフロントエンド面接の質問 - CSS
- 2023 年のフロントエンド面接の質問 - HTML
- 2023 年のフロントエンド面接の質問 - React
- 2023 年のフロントエンド面接の質問 - コーディングの章
React や Angular などの他のフロントエンド フレームワークと比較した Vue.js の利点と違いは何ですか?
- シンプルさと使いやすさ:
Vue.js は、学習と使用が簡単な軽量フレームワークです。直感的な API と明確なドキュメントを提供し、開発者がアプリケーションを迅速に構築できるようにします。
React と Angular はある意味でより複雑であり、より多くの学習コストが必要です。
- 進歩的なフレームワーク:
Vue.js は進歩的なフレームワークとして知られており、その機能を徐々に採用することができます。これは、アプリケーション全体を一度に書き直すことなく、Vue.js を既存のプロジェクトに統合できることを意味します。
React と Angular を既存のプロジェクトに統合する場合は、さらに多くの作業が必要になる場合があります。
- 双方向のデータ バインディング:
Vue.js は、ビューとモデル間でデータの同期を保つための直接双方向データ バインディングを提供します。これにより、開発者はアプリケーションの状態を管理しやすくなります。
React と Angular もデータ バインディングをサポートしていますが、実装方法が若干異なります。
- コンポーネント開発:
Vue.js、React、Angular はすべてコンポーネントベースの開発を奨励していますが、この点では Vue.js が優れています。Vue コンポーネントの定義は非常にシンプルで、再利用と保守が簡単です。
React は JSX を使用してコンポーネントを作成し、Angular はテンプレートを使用します。これらのフレームワークのコンポーネント システムも強力ですが、より多くの構成が必要になる場合があります。
- エコシステムとコミュニティ:
React と Angular には、豊富なサードパーティ ライブラリとプラグインを備えた巨大なエコシステムとアクティブなコミュニティ サポートがあります。
Vue.js エコシステムも成長しており、比較的小規模ではありますが、コミュニティも非常に活発です。
- パフォーマンス:
Vue.js はパフォーマンスの点で優れており、ビューを効率的に更新できる仮想 DOM メカニズムを備えています。
React も仮想 DOM を使用しており、パフォーマンスも非常に優れています。Angular では、場合によってはさらにパフォーマンスの最適化作業が必要になる場合があります。
- ツールとエコシステム:
Vue.js は、プロジェクトを迅速に構築し、Vue Router や Vuex などの公式ライブラリと統合するための、Vue CLI などの強力なツールをいくつか提供します。
React と Angular には同様のツールとライブラリがありますが、Vue のツール エコシステムはある意味でより直感的で使いやすいです。
- 使用例:
Vue.js は、小規模から中規模のアプリケーション、シングルページ アプリケーション (SPA)、およびラピッド プロトタイピングが必要なプロジェクトに適しています。
React と Angular は、大規模なエンタープライズ アプリケーションを含む、あらゆる規模のアプリケーションに適しています。要約すると、使用するフロントエンド フレームワークの選択は、プロジェクトのニーズとチームの好みによって決まります。Vue.js は、シンプルさ、使いやすさ、進歩的な開発という点で利点があり、多くのプロジェクトに適していますが、React と Angular も大規模なアプリケーションやエンタープライズ レベルのプロジェクトで利点があります。
Vue インスタンスとコンポーネントの違いは何ですか? 彼らはどのようにコミュニケーションをとっているのでしょうか?
Vue インスタンスと Vue.js のコンポーネントは 2 つの異なる概念であり、両者の間にはいくつかの重要な違いがあり、通信方法も異なります。
1. Vue 实例(Vue Instance):
- Vue インスタンスは、Vue.js の中核概念の 1 つです。これは、アプリケーションの状態、動作、ライフサイクルを管理するために使用される独立した Vue オブジェクトです。
- 通常、Vue アプリケーションのルート インスタンスが作成され、アプリケーション全体のデータとメソッドが管理されます。
new Vue()
を使用してVue インスタンスを作成できます。
2. コンポーネント:
- コンポーネントは、ユーザー インターフェイスの構築に使用される Vue.js の再利用可能なコード ブロックです。各コンポーネントには独自の状態、動作、テンプレートがあります。
- コンポーネントはタグと同様にテンプレートで使用できるため、コンポーネントを保守可能な部分に分割して複雑なユーザー インターフェイスを構築できます。
- コンポーネントは、
Vue.component
単一ファイル コンポーネント (ファイル)を介して、または使用して定義されます。.vue
コミュニケーション方法:
Vue.js では、Vue インスタンスとコンポーネントは次の方法で通信できます。
1.小道具:
- 親コンポーネントは、props を通じて子コンポーネントにデータを渡すことができます。子コンポーネントは props を通じてデータを受け取り、それを独自のテンプレートで使用します。
- これは一方向のデータ フロー メソッドであり、親コンポーネントがデータを子コンポーネントに渡します。
2. カスタム イベント:
- 子コンポーネントは、カスタム イベントをトリガーすることで、イベントの発生を親コンポーネントに通知できます。親コンポーネントはこれらのイベントをリッスンし、適切なアクションを実行できます。
- これは、子コンポーネントから親コンポーネントに通信する方法です。
3. 状態管理 (Vuex など):
- 大規模なアプリケーションの場合、Vuex などの状態管理ライブラリを使用してアプリケーションの状態を管理できます。すべてのコンポーネントがデータにアクセスして変更できる一元化された状態ストアを提供します。
- これは、コンポーネント間で通信するための高レベルの方法です。
4. 依存関係の注入:
- Vue.js は、祖先コンポーネントに一部のデータを登録し、レイヤーごとに props を渡すことなく、子孫コンポーネントでこのデータにアクセスできる依存関係注入メカニズムを提供します。
- 依存関係の注入は通常、いくつかのグローバル構成またはテーマ スタイルを渡すために使用されます。
概要:
Vue インスタンスはアプリケーション全体のルート オブジェクトであり、コンポーネントはアプリケーション内で再利用可能なモジュールです。それらの間の通信は主に props とカスタム イベントを通じて実現されますが、より複雑な状態管理の場合は、Vuex またはその他の状態管理ライブラリを使用できます。
Vueのライフサイクルフック機能とは何ですか? 実行される順序は何ですか?
Vue.js のライフサイクル フックは、コンポーネントのさまざまなライフサイクル ステージでコードを実行できるようにする特定の関数セットです。これらのフック関数は、初期化、データのロード、DOM 操作などのタスクを実行するために使用できます。Vue コンポーネントのライフサイクル フック関数は、次の順序で実行されます。
-
beforeCreate (作成前):
- コンポーネントインスタンスが作成される直前に呼び出されます。
- 現時点では、コンポーネントのデータとイベントはまだ初期化されていません。
-
作成されました (作成後):
- コンポーネント インスタンスが作成された直後に呼び出されます。
- コンポーネントのデータは初期化されていますが、まだ DOM にマウントされていません。
-
beforeMount (マウント前):
- コンポーネントが DOM にマウントされる直前に呼び出されます。
- この時点で、テンプレートのコンパイルは完了していますが、コンポーネントはまだページにレンダリングされていません。
-
実装済み (実装後):
- コンポーネントが DOM にマウントされた直後に呼び出されます。
- この時点で、コンポーネントはページにレンダリングされ、DOM 操作を実行できるようになります。
-
beforeUpdate (アップデート前):
- コンポーネントデータが更新される直前に呼び出されます。
- このフック関数内では以前の状態にアクセスできますが、最新のデータはまだ適用されていません。
-
更新しました:
- コンポーネント データが更新された直後に呼び出されます。
- この時点でコンポーネントは再レンダリングされ、DOM 操作を実行できるようになります。
-
beforeDestroy (破壊前):
- コンポーネントが破棄される直前に呼び出されます。
- この時点では、コンポーネントはまだ利用可能なので、クリーンアップ作業を実行できます。
-
破壊されました (破壊後):
- コンポーネントが破棄された直後に呼び出されます。
- この時点で、コンポーネントは完全に破壊されており、使用できなくなります。
これらのライフサイクル フック関数を使用すると、アプリケーションのニーズを満たすためにさまざまな段階でコードを実行できます。たとえば、created
データの初期化はフックで実行でき、mounted
DOM 操作はフックで実行できます。異なるライフサイクルフックは異なる目的に適しているため、ニーズに応じて対応するタスクを実行するには適切なフック関数を選択する必要があることに注意してください。
Vue の双方向データ バインディングはどのように実装されますか? 例を挙げてください。
Vue.js の双方向データ バインディングは、独自のリアクティブ システムを通じて実装されています。このシステムは、ES6 プロキシ オブジェクトまたは Object.defineProperty() メソッドを使用して、データが変更されたときに更新するようにビューに通知します。つまり、データ モデルを変更すると、それに関連付けられたビューが自動的に更新され、その逆も同様です。
以下は、Vue.js で双方向データ バインディングを実装する方法を示す簡単な例です。
HTML テンプレート:
<div id="app">
<input v-model="message" type="text">
<p>{
{ message }}</p>
</div>
Vue インスタンスの JavaScript コード:
new Vue({
el: '#app',
data: {
message: 'Hello, Vue!'
}
})
この例では、v-model
ディレクティブを使用して<input>
要素を Vue インスタンスのプロパティに双方向にバインドしますmessage
。つまり、入力ボックスにテキストを入力すると、message
の値が自動的に更新され、message
の値が変更されると、テキストも自動的に更新されます。
入力ボックスにテキストを入力すると、Vue は入力された値をmessage
属性に自動的に更新し、ビューからデータへの更新を実現します。次に、message
JavaScript コードで属性の値を変更すると、ビュー内のテキストが自動的に更新され、データからビューへの更新が行われます。
この双方向のデータ バインディングにより、データとビューの同期が維持され、フロントエンド開発におけるユーザー入力とデータ表示の処理タスクが大幅に簡素化されます。
Vue における計算プロパティとオブザーバーの役割は何ですか? それらの違いは何ですか?
Vue.js では、計算されたプロパティとオブザーバーは両方ともデータの変更を処理するために使用されますが、役割と用途が異なります。
計算されたプロパティ:
計算プロパティは、関数と同様に、他のデータ プロパティに基づいて値が計算される Vue.js のプロパティ タイプです。計算プロパティの主な機能は、テンプレート内で直接参照できるように計算ロジックをカプセル化することであり、依存データが変更された場合にのみ再計算されるキャッシュ メカニズムを備えています。
主な特徴と機能:
- 既存のデータ属性に基づいて値を導出または計算するために使用されます。
- キャッシュ メカニズムを使用すると、関連するデータが変更された場合にのみ再計算され、パフォーマンスが向上します。
- 通常の属性と同様に、テンプレート内で直接参照できます。
- 計算されたプロパティは通常、単純なデータ変換、フィルタリング、書式設定、その他の操作に使用されます。
例:
<template>
<div>
<p>{
{ fullName }}</p>
</div>
</template>
<script>
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
}
},
computed: {
fullName() {
return this.firstName + ' ' + this.lastName;
}
}
}
</script>
ウォッチャー:
オブザーバーは、データ変更時にカスタムの非同期操作または負荷の高い操作を実行する Vue.js の方法です。1 つ以上のデータ プロパティの変更をリッスンし、データが変更されたときに特定の関数を実行できます。
主な特徴と機能:
- 非同期リクエストや複雑なデータ処理など、データ変更時にカスタム操作を実行するために使用されます。
- キャッシュ メカニズムはなく、データが変更されるたびに実行がトリガーされます。
- データ変更を処理するには、オブザーバー関数を手動で記述する必要があります。
- 複数のデータ属性の変更を監視できます。
例:
<template>
<div>
<p>{
{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: 'Initial Value',
message: ''
}
},
watch: {
value(newValue, oldValue) {
// 在value属性变化时执行的操作
this.message = 'Value changed: ' + newValue;
}
}
}
</script>
違い:
-
計算属性は主にデータの変換と導出に使用されます。キャッシュ メカニズムがあり、関連するデータが変更された場合にのみ再計算されます。単純なデータ処理に適しています。通常のプロパティと同様に、テンプレート内で直接参照できます。
-
オブザーバーは、データ変更時にカスタマイズされた操作を実行するために使用されます。キャッシュ メカニズムはなく、データが変更されるたびに実行がトリガーされます。複雑な非同期操作や、複数のデータ変更を監視する必要がある状況の処理に適しています。
特定のニーズに応じて、計算プロパティまたはオブザーバーを使用してデータ変更を処理することを選択できます。一般に、計算プロパティはよりシンプルでパフォーマンスが高いため好まれますが、オブザーバーはデータ変更の特別な処理が必要な場合にのみ使用されます。
Vue コンポーネントについての理解について話してください。Vue コンポーネントを作成するにはどうすればよいですか?
Vue コンポーネントは、Vue.js アプリケーションで再利用可能なモジュールであり、ページを複数の独立した部分に分割し、各部分は独自の状態、テンプレート、動作を持ちます。コンポーネント化は Vue.js の中核概念の 1 つで、フロントエンド開発をよりモジュール化し、保守しやすく、再利用しやすくします。
Vue コンポーネントを作成する基本的な手順は次のとおりです。
- コンポーネントを定義する:まず、Vue コンポーネントを定義する必要があります。
Vue.component
コンポーネントは、 メソッドを使用するか、単一ファイル コンポーネント (.vue ファイル) を使用して定義できます。以下は、Vue.component
を使用してコンポーネントを定義する例です。
Vue.component('my-component', {
// 组件的选项
template: '<div>This is a custom component</div>'
})
- テンプレートでのコンポーネントの使用:コンポーネントを定義したら、それを親コンポーネントのテンプレートで使用できます。例えば:
<template>
<div>
<my-component></my-component>
</div>
</template>
- コンポーネントにデータを渡す:コンポーネントの prop を通じてデータをコンポーネントに渡すことができるため、コンポーネントは外部データを受け取り、それをテンプレートで使用できます。例えば:
<template>
<div>
<my-component :message="message"></my-component>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello from parent component'
}
}
}
</script>
コンポーネント内で、props
このデータを受信し、テンプレートで使用するために使用できます。
<template>
<div>
<p>{
{ message }}</p>
</div>
</template>
<script>
export default {
props: ['message']
}
</script>
-
コンポーネントのライフ サイクル:コンポーネントには、ライフ サイクルのさまざまな段階でコードを実行できるライフ サイクル フック関数もあります。これらのフック関数には
beforeCreate
、、、、などが含まれcreated
、初期化、データのロード、DOM 操作などのタスクを実行するために使用されますbeforeMount
。mounted
-
カスタム イベント:コンポーネントはカスタム イベントを通じて相互に通信できます。子コンポーネントはカスタム イベントをトリガーでき、親コンポーネントはこれらのイベントをリッスンして、対応するアクションを実行できます。
-
コンポーネント間の通信:プロパティやカスタム イベントに加えて、Vuex などの状態管理ツールを使用して、コンポーネント間の通信とデータ共有を実現することもできます。
つまり、Vue コンポーネントは Vue.js アプリケーションの中心的な概念の 1 つであり、フロントエンド開発をよりモジュール化して保守しやすくし、インターフェイスを複数の再利用可能な部分に分割し、各部分が独自の状態と動作を持つようにすることができます。コンポーネントの作成と使用は Vue.js 開発の重要な部分であり、より効率的で保守可能なフロントエンド アプリケーションを構築するのに役立ちます。
Vue のディレクティブとは何ですか? よく使用される命令をいくつか挙げ、その機能を簡単に紹介します。
Vue.js では、ディレクティブは、DOM 要素に対するアクションを表すためにテンプレートで使用できる特別なトークンです。ディレクティブはv-
で始まり、その後にディレクティブの名前が続きます (例v-bind
:v-if
など)。命令は、テンプレート内のデータを DOM 要素にバインドし、要素の表示、非表示、レンダリング、および動作を制御するために使用されます。
一般的に使用される Vue ディレクティブとその機能をいくつか示します。
-
v-bind
:- 機能: 要素の属性をバインドし、要素の属性値を Vue インスタンスのデータにバインドするために使用されます。
- 例:
<img v-bind:src="imageUrl">
-
v-model
:- 機能: フォーム要素と Vue インスタンス データ間の双方向バインディングを実装するために使用され、ユーザー入力によってデータが自動的に更新されたり、その逆が可能になります。
- 例:
<input v-model="message">
-
v-for
:- 機能: 配列またはオブジェクトのデータをループし、複数の要素を生成するために使用されます。
- 例:
<li v-for="item in items">{ { item }}</li>
-
v-if
/v-else-if
/v-else
:- 機能: JavaScript の条件ステートメントと同様に、条件に基づいて要素の表示と非表示を制御するために使用されます。
- 例:
<div v-if="show">This is shown</div>
-
v-show
:- 機能: 条件に基づいて要素の表示/非表示を制御するために使用されますが、これとは異なり
v-if
、CSS プロパティによって制御されdisplay
、要素を破棄したり再作成したりすることはありません。 - 例:
<div v-show="isVisible">This is shown</div>
- 機能: 条件に基づいて要素の表示/非表示を制御するために使用されますが、これとは異なり
-
v-on
:- 機能: DOM イベントをリッスンし、イベントがトリガーされたときに指定されたメソッドを実行するために使用されます。
- 例:
<button v-on:click="handleClick">Click me</button>
-
v-pre
:- 機能: この要素とそのサブ要素のコンパイルプロセスをスキップし、生の HTML として直接出力します。
- 例:
<div v-pre>{ { message }}</div>
-
v-cloak
:- 機能: Vue のコンパイルが完了するまで、要素と Vue インスタンスの間で非表示のままになります。
- 例:
<div v-cloak>{ { message }}</div>
-
v-once
:- 機能: 要素とコンポーネントを一度だけレンダリングし、応答性の更新は実行されません。
- 例:
<span v-once>{ { message }}</span>
これらの手順により、テンプレート内の DOM 要素を簡単に操作し、データの変更に基づいてビューを動的に更新できます。各ディレクティブには独自の役割があり、宣言的な方法でページのインタラクションとロジックを定義できます。必要に応じてテンプレートでこれらのディレクティブを使用して、強力な Vue.js アプリケーションを構築できます。
Vuexとは何ですか?それは何をするためのものか?Vuex アプリケーションの基本構造を説明してください。
Vuex は、Vue.js アプリケーション専用に開発された状態管理ライブラリです。これは主に、アプリケーション内のデータ フローをより適切に整理、維持、追跡するために、Vue.js アプリケーションの共有状態 (データ、ステータス、構成情報など) を管理するために使用されます。Vuex の中心となるアイデアは、アプリケーションの状態をグローバル ストアに一元的に保存し、状態の変化を予測可能かつ保守可能にすることです。
Vuex の主な機能は次のとおりです。
-
集中状態管理: Vuex を使用すると、アプリケーションの状態をストアと呼ばれる 1 つの場所に保存できます。このストアは応答性の高い状態ツリーであり、props を介してデータを渡すことなく、複数のコンポーネントがこの状態を共有してアクセスできます。
-
状態変化を追跡可能: Vuex は厳密な状態変化追跡メカニズムを使用しており、状態が変化するたびに明確な記録とログが作成され、開発者がアプリケーションを追跡およびデバッグしやすくなります。
-
コンポーネント通信: Vuex は、コンポーネント間の通信を管理するための統一された方法を提供します。コンポーネントは、ミューテーションを送信することで状態を変更でき、アクションをディスパッチすることで非同期操作をトリガーすることもでき、これらの操作は予測可能で制御可能です。
-
ミドルウェア: Vuex は、状態が変化したときにログ記録やデータの永続化などの追加ロジックを実行できるミドルウェアをサポートしています。
基本的な Vuex アプリケーションには通常、次のコンポーネントが含まれています。
-
状態:アプリケーションの状態データ (通常は JavaScript オブジェクト) を保存します。
-
ミューテーション:状態を変更するために使用されるメソッド。各突然変異にはタイプと、実際の状態変更操作を実行するハンドラー関数があります。
-
アクション:ミューテーションに似ていますが、非同期操作を含めることができ、通常はサーバーとの対話やデータ取得などを処理するために使用されます。アクションは、状態を変更するために突然変異を送信する責任があります。
-
ゲッター (計算されたプロパティ):計算されたプロパティと同様に、状態から新しいデータを取得するために使用され、コンポーネントによって直接使用できます。
-
Store:状態、ミューテーション、アクション、ゲッターを一元管理するオブジェクトで、Vuex の中核を成します。
以下は、単純な Vuex アプリケーションの基本構造の例です。
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
},
decrement(state) {
state.count--
}
},
actions: {
incrementAsync(context) {
setTimeout(() => {
context.commit('increment')
}, 1000)
}
},
getters: {
doubleCount(state) {
return state.count * 2
}
}
})
export default store
上の例では、状態、突然変異、アクション、計算されたプロパティを含む Vuex ストアを定義しました。このストアは Vue コンポーネントで参照でき、アプリケーションの状態を管理および操作するために使用されます。Vuex を使用すると、特に大規模なアプリケーションにおいて、状態管理とコンポーネント通信を大幅に簡素化できます。
Vueルーターとは何ですか? それは何をするためのものか?Vue Router の基本的な使い方を説明してください。
Vue Router は Vue.js の公式ルーティング管理ライブラリであり、シングルページ アプリケーション (SPA) の構築に使用されます。Vue アプリケーションでページ間のナビゲーション、ルーティング ジャンプ、URL 管理を実装できます。Vue Router の主な機能は、さまざまなビュー コンポーネントをアプリケーションのさまざまなルート (URL アドレス) に関連付けて、ページ間の切り替えとナビゲーションを実現することです。
Vue Router の基本的な使用法には次の手順が含まれます。
-
Vue Router をインストールする:まず、Vue Router を Vue.js プロジェクトにインストールします。npm または Yarn を使用してインストールできます。
npm install vue-router # 或者 yarn add vue-router
-
ルーティング構成を作成する:プロジェクト内にルーティング構成ファイル (通常は という名前) を作成し
router.js
、Vue と Vue Router をインポートします。import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ { path: '/', // 路由路径 component: Home // 对应的视图组件 }, { path: '/about', component: About } // 其他路由配置 ] const router = new VueRouter({ routes // 使用配置文件中的路由规则 }) export default router
-
ビュー コンポーネントの作成:各ルーティング パスに対応するビュー コンポーネントを作成します。
Home.vue
これらのコンポーネントは、や などの通常の Vue コンポーネントにすることができますAbout.vue
。 -
ルート コンポーネントでルーターを使用する:ルート Vue インスタンス (通常は次の場所) で Vue ルーターを使用します
main.js
。import Vue from 'vue' import App from './App.vue' import router from './router' // 导入路由配置 new Vue({ el: '#app', router, // 使用路由配置 render: h => h(App) })
-
<router-link>
および を使用する<router-view>
:テンプレート内のタグを使用して<router-link>
ナビゲーション リンクを作成し、<router-view>
タグを使用して現在のルートのビュー コンポーネントをレンダリングします。例えば:<template> <div> <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> <router-view></router-view> </div> </template>
-
ナビゲーションとルート ジャンプ:を使用して
<router-link>
ルート ナビゲーションを実装したり、コンポーネント内のメソッドを使用してthis.$router.push()
プログラムによるルート ジャンプを実行したりできます。
以上が Vue Router の基本的な使い方です。Vue.js アプリケーションのページ間のナビゲーションとルート切り替えを簡単に実装できるため、単一ページ アプリケーションの開発がより便利で保守しやすくなります。ルート構成を定義し、ビュー コンポーネントを関連付けることで、機能豊富な単一ページ アプリケーションを構築し、さまざまなビュー コンポーネントをさまざまな URL ルートに関連付けることができます。
Vue2とVue3の違いは何ですか?
Vue.js 2 と Vue.js 3 の間には、いくつかの重要な違いと改善点があります。主な違いと機能の一部を次に示します。
-
パフォーマンスの最適化:
- Vue 3 では、仮想 DOM のアップグレードなど、内部で多くのパフォーマンスの最適化が行われ、より高速かつ効率的になりました。
- Vue 3 では、パフォーマンスをさらに向上させるために、遅延読み込み (Lazy Loading) や静的ホイスティング (Static Hoisting) などの最適化戦略が導入されています。
-
構成API:
- Vue 3 では、コンポーネント ロジックのより柔軟な編成と再利用を可能にする関数ベースの API である、Composition API が導入されています。
- Comboposition API を使用すると、開発者はコードを機能ごとに分割できるため、コードの可読性と保守性が向上します。
-
より小さなパッケージサイズ:
- Vue 3 のコア ライブラリは小さいため、読み込みが速くなります。
- Vue 3 ではオンデマンドローディングをサポートしているため、必要な機能のみを導入することができ、パッケージサイズをさらに縮小できます。
-
テレポート:
- Vue 3 では、コンポーネントのコンテンツを DOM 内の任意の場所にレンダリングできる Teleport が導入されました。これは、モーダル ボックス、ポップアップ メニュー、その他のシナリオの処理に非常に役立ちます。
-
断片:
- Vue 3 はフラグメントをサポートしているため、追加のコンテナ要素を必要とせずに、コンポーネントが複数のルート要素を返すことができます。
-
グローバル API の変更:
- Vue 3 では、最新の JavaScript 標準との整合性を高めるために、グローバル API にいくつかの変更が加えられています。
- たとえば、
Vue.component
に変更しapp.component
、Vue.directive
に変更しapp.directive
、Vue.mixin
に変更しますapp.mixin
。
-
新しいライフサイクルフック:
onBeforeMount
Vue 3 では、 やなどの新しいライフサイクル フックが導入され、onBeforeUpdate
より正確な制御とより優れたパフォーマンス最適化の機会が提供されます。
-
TypeScript サポートの改善:
- Vue 3 では TypeScript がより完全にサポートされ、より優れた型推論と型チェックが提供されます。
-
応答性の高いシステムの改善:
- Vue 3 はシステムの応答性を向上させ、TypeScript サポートを強化し、効率を高めています。
全体的に、Vue.js 3 ではパフォーマンス、開発エクスペリエンス、保守性が大幅に向上しています。ただし、Vue 2 は依然として安定したバージョンであり、幅広いエコシステムとサポートを備えており、開発者はプロジェクトのニーズに基づいて使用するバージョンを選択できます。新しいプロジェクトを開始する場合は、多くの利点と改善点があるため、Vue 3 を選択することをお勧めします。Vue 2 プロジェクトを維持している場合は、パフォーマンスと開発エクスペリエンスを向上させるために、徐々に Vue 3 に移行することを検討することもできます。
Vue3 の新機能をいくつか挙げていただけますか?
Vue.js 3 の重要な新機能と改善点をいくつか示します。
-
コンポジション API:コンポジション API は、Vue 3 の最も印象的な新機能の 1 つです。これにより、コードを機能ごとに分割し、関連するコード ロジックをまとめて整理できるため、保守性とコードの再利用性が向上します。
-
テレポート:テレポートは、コンポーネントのコンテンツを DOM 内の他の場所にレンダリングできるようにする新機能です。これは、モーダルやポップアップ メニューなどのコンポーネントを作成する場合に便利です。
-
フラグメント: Vue 3 はフラグメントをサポートしており、追加のラッピング コンテナ要素を必要とせずに、コンポーネントが複数のルート要素を返すことができます。
-
グローバル API の変更: Vue 3 では、最新の JavaScript 標準との一貫性を高めるために、グローバル API にいくつかの変更が加えられています。たとえば、
Vue.component
に変更しますapp.component
。 -
パフォーマンスの最適化: Vue 3 は、仮想 DOM のアップグレード、遅延読み込み、静的プロモーション、およびアプリケーションをより高速かつ効率的にするためのその他の戦略を含む、最下位レベルで多くのパフォーマンスの最適化を実行しました。
-
応答性システムの改善: Vue 3 では応答性システムが改善され、より優れた TypeScript サポートとより効率的な応答性データ追跡が提供されます。
-
TypeScript のサポート: Vue 3 は TypeScript をより完全にサポートし、より優れた型推論と型チェックを提供します。
-
パッケージ サイズの縮小: Vue 3 のコア ライブラリはより小さく、読み込みが速く、オンデマンド読み込みをサポートしているため、パッケージ サイズが縮小されています。
-
ライフサイクル フックの改善:
onBeforeMount
Vue 3 では、や などの新しいライフサイクル フックが導入されonBeforeUpdate
、より正確な制御とパフォーマンスの最適化の機会が提供されます。 -
Suspense: Vue 3 は Suspense 機能をサポートしています。これにより、非同期コンポーネントの読み込みステータスを適切に処理し、より良いユーザー エクスペリエンスを提供できるようになります。
-
カスタム レンダラー: Vue 3 ではカスタム レンダラーを作成できます。これにより、サーバーサイド レンダリング (SSR) やネイティブ アプリケーションなど、さまざまなターゲット環境で Vue を使用できるようになります。
-
V-model の改善: Vue 3 では v-model の構文が改善され、より柔軟になり、カスタム コンポーネントの双方向バインディングに使用できるようになりました。
これらの新機能と改善により、Vue.js 3 はより強力で効率的かつ柔軟なフロントエンド フレームワークとなり、開発者がより優れた単一ページ アプリケーションとユーザー インターフェイスを構築できるようになります。
Comboposition API とは何ですか、またその利点は何ですか?
Comboposition API は、Vue.js 3 で導入された新しいコンポーネント編成メソッドです。これを使用すると、コンポーネントのコード ロジックを機能ごとに分割して編成できます。これは、従来のオプション API とは対照的に、関数ベースの API スタイルであり、主な利点は次のとおりです。
-
より柔軟なコード構成:構成 API を使用すると、コンポーネントのコード ロジックを機能的に関連する複数の部分に分割でき、各部分は独立した機能になります。これにより、コードがより明確になり、保守とテストが容易になります。コード ロジックをより簡単に再利用して、複数のコンポーネントに適用できます。
-
型推論の向上: Composition API を TypeScript で使用する場合、
Vue 3 にはどのようなパフォーマンスの最適化がありますか?
Vue 3 では、アプリケーションのパフォーマンスを向上させるために、パフォーマンスの最適化における多くの新機能と改善が導入されています。Vue 3 のパフォーマンス最適化策をいくつか示します。
-
仮想 DOM の書き換え: Vue 3 の仮想 DOM 実装は、より高速かつ軽量になるように書き直されました。これは、レンダリングと更新のパフォーマンスが向上することを意味します。
-
静的ツリーのプロモーション: Vue 3 は静的サブツリーを検出し、それらを静的 vnode にプロモートして、不必要な再レンダリングや比較操作を回避できます。
-
Sloth ローディング: Vue 3 は、必要な場合にのみサブコンポーネントをレンダリングする Sloth ローディングをサポートし、初期レンダリングの負担を軽減します。
-
より良いイベント処理: Vue 3 は、より効率的なイベント リスニングおよび処理方法を採用し、イベント処理のパフォーマンスを向上させます。
-
コンパイラーの最適化: Vue 3 のテンプレート コンパイラーは、より効率的なレンダリング関数を生成し、実行時のオーバーヘッドを削減するように最適化されています。
-
フラグメントとテレポート: Vue 3 では、フラグメントとテレポートが導入されました。これらの機能は、コンポーネントをより効果的に整理し、不必要なネストとレンダリング ノードを減らすのに役立ちます。
-
Suspense : Vue 3 の Suspense 機能を使用すると、非同期コンポーネントのロード時にプレースホルダーを表示できます。これにより、不必要なレンダリングを削減しながらユーザー エクスペリエンスが向上します。
-
リアクティブ システムの書き換え: Vue 3 のリアクティブ システムは、より高速かつスケーラブルになるように書き直されました。これは、Vue 2 の Object.defineProperty よりも効率的な Proxy プロキシを使用します。
-
構成 API : Vue 3 では、コードをより柔軟に編成および再利用できるようにする構成 API を導入し、コードのパフォーマンスと保守性の向上に役立ちます。
-
Tree-Shaking : Vue 3 は ES モジュールを使用してコードを整理するため、Webpack などのビルド ツールは、アプリケーションで実際に使用されるコードのみを含めて Tree-Shaking をより簡単に実行でき、パッケージのサイズを削減できます。
これらのパフォーマンス最適化対策により、Vue 3 はより高速で効率的なフロントエンド フレームワークとなり、より応答性が高く流動的な Web アプリケーションの構築に役立ちます。ただし、パフォーマンスの最適化は特定のアプリケーションや使用状況にも依存するため、実際のプロジェクトではさらなるパフォーマンスの分析と調整が必要になる場合があることに注意してください。
テレポートとフラグメントとは何ですか?また、Vue 3 におけるそれらの役割は何ですか?
Vue 3 では、テレポートとフラグメントは 2 つの新機能で、それぞれコンポーネントのレンダリング構造とレンダリング位置制御を改善するために使用されます。これらの機能と使用方法は次のとおりです。
-
テレポート:
-
機能: テレポートを使用すると、親コンポーネントの制限を受けることなく、コンポーネントのコンテンツを DOM 構造内の別の場所にレンダリングできます。これは、ページ上の別の場所にレンダリングする必要があるモーダル、ダイアログ ボックス、通知メッセージなどを処理する場合に便利です。
-
使用法: テンプレートで要素を使用し
<teleport>
、to
その属性をターゲット セレクターに設定して、コンテンツをレンダリングする DOM 要素を指定できます。例えば:<template> <div> <button @click="showModal">Show Modal</button> <teleport to="#modal-container"> <Modal v-if="isModalVisible" @close="closeModal" /> </teleport> </div> </template>
id="modal-container"
上記の例では、Modal コンポーネントのコンテンツがページ内の DOM 要素内にレンダリングされます。 -
-
フラグメント:
-
機能: フラグメントを使用すると、追加の DOM 要素を導入せずに、複数の子要素を親要素でラップできます。これにより、DOM 構造のネストが減り、コードがより明確かつ簡潔になります。
-
使用法:
<template>
要素または Vue 3 が提供する特別な構文を使用してv-fragment
、フラグメントを作成できます。例えば:<template> <div> <p>Paragraph 1</p> <p>Paragraph 2</p> <v-fragment> <p>Paragraph 3</p> <p>Paragraph 4</p> </v-fragment> </div> </template>
上の例では、
<v-fragment>
2 つの要素がラップされています<p>
が、最終的にレンダリングされた DOM 構造には追加の親要素が含まれていません。
-
Teleport と Fragments は、Vue 3 の 2 つの強力なツールです。これらは、コードの読みやすさと保守性を向上させながら、コンポーネントのレンダリング構造をより柔軟かつ明確に管理するのに役立ちます。これら 2 つの機能は、複雑なレイアウトや再利用可能なコンポーネントを扱う場合に特に役立ちます。
Vue 3 のグローバル API にはどのような変更が加えられましたか? これらの変更された API を使用するにはどうすればよいですか?
Vue 3 では、パフォーマンスと機能を向上させるために、グローバル API にいくつかの変更が加えられています。主な変更点の一部と、これらの変更された API の使用方法を次に示します。
-
Vue インスタンスを作成します。
-
変更前 (Vue 2) : Vue 2 では、
new Vue()
を使用してルート Vue インスタンスを作成できます。 -
変更後 (Vue 3)
createApp()
: Vue 3 では、次のようなアプリケーション インスタンスの作成に使用できます。import { createApp } from 'vue'; const app = createApp(App); app.mount('#app');
-
-
グローバルコンポーネントの登録:
-
修正前(Vue 2)
Vue.component()
: Vue 2ではグローバル登録コンポーネントが使用できます。 -
変更後 (Vue 3)
app.component()
: Vue 3 では、次のようなグローバル コンポーネントを登録できます。app.component('my-component', MyComponent);
-
-
フィルター:
- 変更前 (Vue 2) : Vue 2 はフィルターをサポートしていますが、Vue 3 ではフィルターの概念が削除されています。計算されたプロパティまたはメソッドを使用して、フィルターの機能を置き換えることができます。
-
ミックスイン:
-
変更前 (Vue 2) : Vue 2 では、
mixins
オプションを使用してコンポーネント オプションを組み合わせることができます。 -
変更後 (Vue 3) : Vue 3 では、
mix
次のような関数を使用して同様の機能を実現できます。import { defineComponent, ref, mix } from 'vue'; const mixin = { data() { return { message: 'Hello from mixin' }; } }; const MyComponent = defineComponent({ mixins: [mixin], setup() { const count = ref(0); return { count }; }, template: ` <div> { { message }} { { count }} </div> ` });
-
-
カスタム手順:
-
変更前(Vue 2): Vue 2では、
Vue.directive()
グローバルカスタムディレクティブを登録することができます。 -
変更後 (Vue 3)
app.directive()
: Vue 3 では、次のようなグローバル カスタム ディレクティブを登録できます。app.directive('my-directive', { // 自定义指令的定义 });
-
これらは、いくつかの主要なグローバル API 変更です。Vue 3 では、グローバル API の使用方法が Vue 2 とは少し異なるため、プロジェクトを移行するとき、または新しい Vue 3 コードを作成するときは、これらの変更に注意する必要があります。アプリケーションが Vue 3 の機能とパフォーマンスの利点を最大限に活用できるようにするには、ケースバイケースで新しい API を使用する必要があります。
Vue 3 でのリアクティブ システムがどのように機能するかを説明してください。
Vue 3 の中心的な機能の 1 つは、アプリケーション内のデータとビューを自動的に同期できるリアクティブ システムです。Vue 3 のリアクティブ システムがどのように機能するかを簡単に説明します。
-
初期化:
- Vue 3 コンポーネントまたはアプリケーションを作成すると、Vue はリアクティブ システムのインスタンスを初期化します。
-
データ定義:
setup
リアクティブ データはコンポーネントの関数で作成します。これはref
、reactive
、 、 またはを使用してcomputed
実現できます。
-
データ依存関係の追跡:
- コンポーネントがレンダリングされると、Vue はデータ プロパティの依存関係を自動的に追跡します。これは、Vue がビューのレンダリングに使用されるデータ プロパティを認識していることを意味します。
-
リアクティブな依存関係の収集:
- Vue は、コンポーネントのレンダリング中にデータ プロパティの依存関係を収集し、依存関係グラフを構築します。
-
データ変更時にトリガーされます:
- リアクティブ データ プロパティが変更されると、Vue はそのデータ プロパティに依存するビューに更新するように通知します。
-
バッチ更新:
- Vue 3 は、DOM 更新操作を最小限に抑え、パフォーマンスを向上させるために、複数のデータ変更の通知をバッチ処理します。
-
非同期更新キュー:
- Vue 3 は、マイクロタスク キュー ( や など
Promise
)を使用しnextTick
てデータ更新を処理し、同じイベント ループ内の複数のデータ変更が 1 つのビュー更新のみをトリガーするようにします。
- Vue 3 は、マイクロタスク キュー ( や など
-
更新を表示:
- データの変更がビューに通知されると、Vue 3 は関連するコンポーネント パーツを再レンダリングして、最新のデータとの同期を保ちます。
-
計算されたプロパティとリスナー:
computed
Vue 3 では、計算されたプロパティ ( ) とリスナー ( )を使用してwatch
、データの導出を処理し、変更をリッスンできます。これらの機能も、リアクティブ システムの動作に依存しています。
一般に、Vue 3 の応答システムは、データ依存関係の追跡と自動ビュー更新メカニズムを通じて、データとビューの間の自動同期を実現します。これにより、開発者は DOM を手動で操作する必要がなくなり、データ処理に集中できるようになり、開発効率が向上し、コードの保守性が向上します。
RefとReactiveの違いは何ですか?
ref
と は、reactive
Vue 3 でリアクティブ データを作成する 2 つの異なる方法であり、いくつかの重要な違いがあります。
-
参照タイプ:
ref
:ref
単一のレスポンシブ データを作成するために使用されます。通常の JavaScript 値 (数値、文字列など) を.value
プロパティを持つオブジェクトにラップし、応答性の高いデータにします。reactive
:reactive
複数のプロパティを含む応答性の高いオブジェクトを作成するために使用されます。通常の JavaScript オブジェクトを受け入れ、応答性の高いプロキシ オブジェクトを返します。これにより、オブジェクト内のプロパティを応答性の高いデータに変換できます。
-
アクセス方法:
ref
:プロパティを通じて値.value
にアクセスできます。ref
例:myRef.value
。reactive
reactive
:オブジェクト内のプロパティに直接アクセスできます。例:myReactiveObj.someProperty
。
-
目的:
ref
.value
: 通常、数値、文字列、ブール値などの基本的なデータ型をラップするか、を通じて更新する必要があるデータをラップするために使用されます。reactive
: 通常、複雑な構成オブジェクトやコンポーネントの状態など、複数のプロパティを含む応答性の高いデータ オブジェクトを作成するために使用されます。
-
例:
-
リアクティブ データの作成に使用します
ref
。import { ref } from 'vue'; const count = ref(0); // 创建一个包装数字的 ref
-
リアクティブ オブジェクトの作成に使用します
reactive
。import { reactive } from 'vue'; const person = reactive({ name: 'Alice', age: 30 }); // 创建一个包含多个属性的响应式对象
-
一般に、ref
単一のリアクティブ データを作成するために使用され、通常は基本データ型をラップするために使用されます。これはreactive
、通常は複雑なデータ構造やコンポーネントの状態を管理するために、複数のプロパティを含むリアクティブ オブジェクトを作成するために使用されます。どの方法を使用するかは、特定のニーズとデータ構造によって異なります。
Vue 3 の TypeScript サポートにはどのような改善が加えられましたか? Vue 3 で TypeScript を使用するにはどうすればよいですか?
Vue 3 では TypeScript のサポートに多くの改良が加えられ、TypeScript と Vue 3 を使用した開発がよりスムーズでタイプセーフになりました。TypeScript を使用するための主な改善点とガイドラインをいくつか示します。
1. 型推論と型宣言:
- Vue 3 では、より強力な型推論が提供され、より正確な型チェックが可能になります。
- Vue 3 には TypeScript 宣言ファイルが付属しているため、追加の宣言ファイルをインストールする必要はありません。
2. 単一ファイルコンポーネント:
- 単一ファイル コンポーネント (.vue ファイル) のパーツは
<script>
、TypeScript を使用して作成できます。 - 型チェックを改善するために、コンポーネントの
props
、data
、methods
などの部分に型宣言を追加できます。
3. さらに型定義を提供します。
ref
Vue 3 は、reactive
、computed
、 、watch
、provide
、およびその他の関数のinject
型定義を含む、豊富な型定義を提供します。
4. 合成API:
- Vue 3 のコンポジション API には強力な TypeScript サポートがあり、再利用可能なロジックを簡単に作成できます。
defineComponent
タイプセーフなコンポーネントは、関数を使用して簡単に定義できます。
5. タイプセーフな小道具:
PropType
コンポーネントでは、プロパティのタイプを定義するために使用できます。- TypeScript のオプションのプロパティとデフォルト値を使用して、props の型安全性を確保します。
6. 自動型推論:
- Vue 3 は多くのプロパティの型を自動的に推論できるため、手動で型宣言を追加する必要性が減ります。
7. タイプセーフなフック機能:
onMounted
Vue 3 は、などonUpdated
のタイプセーフなライフサイクル フック関数をサポートしています。
8. TypeScript デコレーターのサポート:
- Vue 3 は、ミックスインやカスタム命令などの作成に使用できる TypeScript デコレーターをサポートしています。
9. 豊富な TypeScript ドキュメント:
- Vue 3 のドキュメントには、開発者が Vue 3 で TypeScript を使用する方法をより深く理解できるよう、豊富な TypeScript の例と手順が提供されています。
TypeScript を使用するためのガイドライン:
- Vue 3 をインストールする: Vue 3 と TypeScript がプロジェクトにインストールされていることを確認します。
- コンポーネントの作成:
.vue
ファイルまたはコンポジション API を使用してコンポーネントを作成します。型宣言を追加して、コンポーネントのプロパティとデータを定義できます。 - エディターのサポートを利用する: TypeScript をサポートするエディター (VS Code など) を使用して、型チェックとオートコンプリートを強化します。
- Vue 3 ドキュメントに従ってください: TypeScript の使用方法に関する詳細な手順と例が記載されている公式 Vue 3 ドキュメントを確認してください。
全体として、Vue 3 は強力な TypeScript サポートを提供し、Vue 3 プロジェクトで TypeScript をより簡単かつ確実に使用できるようにします。これらの機能を利用して、コードの品質、保守性、開発効率を向上させることができます。
Vue 3 でカスタム ディレクティブとカスタム コンポーネントを作成する方法を説明してください。
コンポーネントのライフサイクル管理とロジックを拡張するために、いくつかの新しいライフサイクル フック関数が Vue 3 に追加されました。新しいライフサイクル フックとその用途は次のとおりです。
-
beforeMount (新規):
- 目的: コンポーネントがマウントされる前に呼び出されます。この段階では、仮想 DOM は準備されていますが、まだ実際の DOM にはレンダリングされていません。いくつかの準備作業を実行するために使用できます。
-
更新前(新規):
- 目的: コンポーネントが更新される前に呼び出されます。この段階では、仮想 DOM は更新されていますが、まだ実際の DOM にはレンダリングされていません。アップデート前の準備作業に使用できます。
-
更新済み(新規):
- 目的: コンポーネントが更新された後に呼び出されます。この段階で、コンポーネントのデータはビューに同期されています。更新された DOM に関連する一部の操作を実行するために使用できます。
-
アンマウント前(新規):
- 目的: コンポーネントがアンインストールされる前に呼び出されます。この段階では、コンポーネントはまだ完全に利用可能です。いくつかのクリーンアップ作業を実行するために使用できます。
-
アンマウント(新規):
- 目的: コンポーネントがアンインストールされた後に呼び出されます。この段階では、コンポーネントのすべてのリソースが解放され、使用できなくなります。最終的なクリーンアップ作業を実行するために使用できます。
これらの新しいライフサイクル フック関数は主に、より詳細なライフサイクル管理に使用され、コンポーネントのさまざまなライフサイクル段階で特定の操作を実行できるようになります。たとえば、beforeMount
フックでレンダリング前の準備に関連するいくつかの操作を実行したり、updated
フックで更新された DOM 操作に関連したいくつかのタスクを実行したりできます。
新しいライフサイクル フックに加えて、Vue 3 は引き続き、created
、mounted
、beforeDestroy
などの Vue 2 の他destroyed
のライフサイクル フックをサポートします。これらのライフサイクル フックを使用すると、さまざまなニーズに合わせてコンポーネントのライフサイクルをより柔軟に管理できます。