Vue.js の初心者向け面接の質問 25 選
1. Vue が「プログレッシブ フレームワーク」と呼ばれるのはなぜですか?
プログレッシブ フレームワークの使用コストは小さいため、既存のプロジェクト (他のテクノロジを使用して構築されたプロジェクト) が新しいフレームワークを採用して移行することが容易になります。 Vue.js は、プログラム全体を最初から書き直すことなく、既存のアプリケーションに徐々に導入できるため、進歩的なフレームワークです。
Vue の最も基本的かつ核となる部分には「ビュー」層が含まれるため、徐々にプログラムに Vue を導入し、「ビュー」実装を置き換えることから始めてください。
Vue は進化する性質により、他のライブラリとうまく連携し、非常に簡単に始めることができます。これは、既存のプログラムを完全にリファクタリングしてフレームワーク内に実装する必要がある Angular.js のようなフレームワークとは対照的です。
2. Vue.js の宣言的レンダリングとは何ですか?
Vue.js を使用すると、データのレンダリングが簡単になり、内部実装が非表示になります。たとえば、次のコード:
HTML
1 |
|
JavaScript
1 2 3 |
|
上記のコード スニペットは、 ID が「app」の場合 p.1 に「こんにちは!」と表示されます。コードには、結果を達成するために必要なすべての手順が含まれています。まず ID が「app」の DOM 要素を選択し、次に innerText プロパティを使用して p の内容を手動で設定します。
それでは、Vue でそれを行う方法を見てみましょう。
テンプレート
1 |
|
アプリ
1 2 3 4 5 6 |
|
Vue プログラムで「greeting」という名前のデータ属性を作成しましたが、内部実装を気にせずに、mustache 構文を使用して p に「greeting」と入力するだけで済みます。 「greeting」変数を宣言すると、残りは Vue が行います。宣言的レンダリングは次のようになります。 Vue は内部情報を非表示にして管理します。
3. オブジェクトのプロパティを調べるにはどのコマンドを使用しますか?
オブジェクトまたは配列を反復するには、v-for ディレクティブを使用できます。以下に例を示します。
テンプレート
1 2 3 4 |
|
アプリ
1 2 3 4 5 6 7 8 9 10 11 |
|
出力
- 名前 - John Doe
- #年齢 - 25
- 都市 - ニューヨーク
- 国 - US
4. 指定Vue プログラムの出力を説明するテンプレート。
Template:
1 |
|
App:
1 2 3 4 5 6 |
|
上記のコードは、p<h1 style="color: green;"> Vue で文字列を出力します。 .js</h1>
。タグ全体が文字列としてレンダリングされる理由は、Mustache テンプレート タグ {{title}}
が受信データを文字列として扱い、それを実行可能コードに解析しないためです。これは、悪意のあるコードがページに挿入される XSS 関連の問題を軽減するのにも役立ちます。これは、JavaScript で elementSelector.innerText = text
ステートメントを使用するのと似ています。
5. 入力ボックスとデータ属性の間の双方向データ バインディングを実装するにはどうすればよいですか?
双方向データ バインディングを実装するには、v-model ディレクティブを使用できます。 v-model ディレクティブは主に糖衣構文です。
1 |
|
上記のステートメントでは、「keyup」イベントが観察されるたびに、「nameInput」という名前のデータ属性が入力ボックスの値に設定されます。同時に、入力ボックスの value 属性を「nameInput」データ属性にバインドします。これにより、フォーム フィールドとデータ属性の間に双方向のデータ関係が確立されます。
v-model は、手動で設定するよりも効率的にこれを行うことができます。 v-model を使用して上記の効果を再現するには、同じ入力ボックスに次のように再度入力します:
1 |
|
双方向データ バインディングを実装する場合、使用されるデータ属性は事実上のソースとみなされます。データ属性に対して行われた変更は、フォーム フィールドでのユーザー入力イベントよりも優先されます。
6. 要素上のクリック イベントをどのようにキャプチャしますか?
v-on:click
ディレクティブを使用して、Click イベントをキャプチャできます。このコマンドは、省略記号 @click
で表すこともできます。以下に例を示します:
v-on:clicksymbol
1 |
|
@clicksymbol
1 |
|
7.ダイナミックプロップ?
v-bind ディレクティブを使用してプロパティにバインドされた関数としてプロパティに値を割り当てる場合、それは動的プロパティと呼ばれます。たとえば、次のコンポーネントの tweet
プロパティは、tweetText という名前のデータ プロパティにバインドされています。これは、静的にハードコードされた値とは対照的です。このバインディングは常に一方向であり、データは親コンポーネントから子コンポーネントに流れることができ、その逆には流れないことを意味します。
1 |
|
8. Vue.js のディレクティブとは何ですか?
ディレクティブは、テンプレート HTML タグに追加して特別な応答性を与えることができる一連の特別な属性です。ディレクティブを使用すると、テンプレート内の要素が、データ プロパティ、メソッド、計算プロパティまたは監視プロパティ、インライン式を使用して定義されたロジックに基づいて変更に反応できるようになります。たとえば、次のコードは v-on ディレクティブを使用して、コンポーネントにクリック イベント リスナーを実装します。
1 |
|
or
1 |
|
この例では、v-if ディレクティブを使用して、showButton というデータ属性に基づいて要素とコンポーネントを表示または削除します。 v- で始まるディレクティブは、Vue 固有のプロパティを示します。この規則の例外は、v-on および v-bind の短縮形です。
1 |
|
Vue では、独自のカスタム ディレクティブを定義することもできます。
9. v-show 指令的用途是什么?
v-show 指令允许有条件地显示元素。在下面的代码中,仅当 isDisplayed
数据属性为 true
时,才会显示该元素。
1 |
|
使用 v-show 指令时,可使用 CSS 的 display
属性切换元素的可见性。
10. v-show 与 v-if 指令有何不同?
v-show 和 v-if 都用于有条件地显示元素,而后者提供了条件渲染的真正实现。 v-show 只需切换 CSS 的 display
属性即可显示或隐藏元素,而 v-if 指令可创建或销毁组件。每次显示状态更改时,代价通常会更大。
另一方面,v-show 成本较低,因为它仅切换元素的CSS显示属性。所以如果必须经常切换元素,则 v-show 会提供比 v-if 更好,更优化的结果。
就加载元素的初始渲染成本而言,v-if 不会渲染最初隐藏的元素的节点,而 v-show 会渲染其 CSS display
属性被设置为 none
的元素。
11. 对于作为元素实现的注释框,我们希望使用户能够按下键盘上的Enter键,来将内容提交给名为 “storeComment” 的方法。在代码中对此进行演示。
可以在任何元素上使用 v-on 指令来实现事件侦听器。此外,v-on 还允许我们将按键修饰符用于 “enter”,“tab”,“esc”,“space” 等常见按键。这是一个例子:
模板
1 |
|
App
1 2 3 4 5 6 7 8 9 |
|
12. 如何在单页 Vue 应用(SPA)中实现路由?
可以通过官方的 vue-router 库在用 Vue 构建的 SPA 中进行路由。该库提供了全面的功能集,其中包括嵌套路线、路线参数和通配符、过渡、HTML5 历史与哈希模式和自定义滚动行为等功能。 Vue 还支持某些第三方路由器包。
13. 使用 Vue 时调用 event.preventDefault() 的最佳方式是什么?
在事件侦听器上调用 event.preventDefault()
的最佳方式是将 .prevent
修饰符与 v-on
指令一起使用。这是一个例子:
1 |
|
14. 什么是过滤器?
过滤器是在 Vue 程序中实现自定义文本格式的一种非常简单的方法。它们就像可以在表达式中通过管道传递(使用管道字符)以取得结果的运算符。下面是一个可以反转文本字符串的过滤器示例:
模板
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
输出
1 |
|
在上面的例子中,我们创建了一个名为 reverseText 的过滤器,该过滤器反转文本字符串并返回。这是一个简单的函数,接受输入并返回处理后的输出。通过在过滤器下声明,它就可以成为可以在模板中使用的过滤器。
在模板中,我们只是将 reverseText 过滤器通过管道传递到了想要在 mustache 标签中显示的数据变量。这样可以将多个过滤器管道连接在一起。因此过滤器提供了一种非常优雅的方式来处理文本。
15. 如何动态地在元素上切换 CSS 类?
Vue 允许我们绑定到 class 属性。在下面的例子中,我们将 class 属性绑定到一个对象,该对象允许使用 data 属性切换类。
模板
1 |
|
App
1 2 3 4 5 6 |
|
在上面的代码中,只要数据属性 showp
为 true
,类名 pStyle
将应用于 p。
16. 绑定 HTML 类时,该如何连接类?假设存在一个元素:Process。我们只希望使用名为 “isActive” 的数据属性动态地切换 btnActive 类。
这可以在绑定类时用 Array 来实现。以下是实现方法:
模板
1 |
|
App
1 2 3 4 5 6 |
|
在上面的代码段中,将串联各个类的数组,并基于 isActive
数据属性的值对对象中的表达式进行响应式评估。
17. 什么是计算属性?
计算属性是一类特殊函数的结果,当从属属性发生变化时,这些函数会自动进行计算。用它们代替内联表达式可以更好地表达复杂的逻辑,在模板中不能作为内联表达式合并。
每个计算方法都可以在模板部分作为属性使用。当从属属性更改时,计算方法将自动计算并缓存结果,这样比使用普通方法更好。方法在访问时将始终会重新计算,而如果自上一次计算和缓存阶段以来该方法内使用的属性未发生更改,则计算的属性将不会重新计算。
需要注意的是,仅当方法中使用的属性是响应性的(例如数据属性)时,才考虑依赖关系的更改。
这是一个演示计算属性的简单例子:
模板
1 2 3 |
|
App
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
在上面的代码示例中,如果正则表达式测试针对电子邮件输入框失败,则 isValid
计算属性将返回 true
。如果电子邮件验证程序认为输入的值无效,就会看到文本框便为红色(你必须创建一个名为 .invalid
的类,并将背景颜色属性设置为红色)。当用户键入内容时,将重新执行计算的方法,并且在验证格式之后,动态删除无效的类。
18. 如何确保在单文件组件中定义的 CSS 样式仅应用于该组件,而不被用于其他组件?
这可以通过样式标签上的 scoped
属性来实现。在内部 Vue 使用 PostCSS 插件为所有样式元素分配唯一的数据属性,然后使样式针对这些唯一的元素。举个例子:
1 2 3 4 5 6 7 8 |
|
19. 如何将数据从父组件传递到子组件?
可以用作为组件中单向入口的 prop 把数据向下传递到子组件。这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
contact-list-item
上绑定的 prop “contact” 是一个入口,用于从用作子项的父组件接收数据。在 contact-list-item
组件中:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
在这里声明了一个名为 “contact” 的 prop 引入数据,然后可以直接在模板部分中显示。
20. 什么是组件?
组件本质上是 Vue 实例,它们封装模板、逻辑和可选的本地响应性数据属性,能够提供可重新使用的自定义构建元素。可重用性是构建组件的核心。
使用单文件组件构建应用程序时,组件在扩展名为 .vue 的文件中定义。单文件组件包含三个部分:模板部分定义了该组件的 HTML 布局;脚本部分定义了数据、属性和逻辑单元(如方法)并将内容导出为 Vue 组件;还有一个样式部分,用于定义组件的样式表。单文件组件使用 Webpack 等模块捆绑器进行编译。
21. 什么是生命周期hook?列出一些生命周期hook。
Vue 实例(组件)从其初始化到销毁和删除都经历生命周期。在整个过程中,Vue 允许开发人员运行自定义函数的几个阶段。这些函数称为生命周期 hook。以下是一些生命周期 hook 的列表:
- created
- mounted
- updated
- destroyed
22. 什么是插槽(slot)?
插槽允许你定义可以封装和接受子 DOM 元素的元素。组件模板中的 <slot> </ slot>
元素作为通过组件标签捕获的所有DOM元素的出口。这是一个例子:
Post.vue |实现插槽的组件
1 2 3 4 5 6 7 8 |
|
App.vue | 使用Post组件的App组件
1 2 3 4 5 6 7 8 9 |
|
在上面的示例中,斜体文本显示在 Post 组件中标有 <slot>
元素的区域内。
23. 什么是观察者?
观察者允许我们观察更改的特定属性,并执行定义为函数的自定义操作。尽管它们的用例与计算的属性相交叉,但是当某些数据属性发生改变时,有时需要观察者执行自定义操作或运行代价昂贵的操作。
24. 如何从子组件发出自定义事件?
可以用 $emit('event-name', eventPayload)
发出自定义事件。然后可以像其他事件一样,用 v-on 指令在父组件上拦截。
25. 开发人员经常使用字母 “vm” 作为变量名来声明根 Vue 实例。例如 const vm = new Vue()。在这种情况下,“vm”指的是什么?
虽然这不是约定,但是开发人员经常使用变量名称 'vm' 来命名根 Vue 实例,该变量名称代表 'ViewModel',因为 Vue 本质上负责视图层,并且部分受到了 MVVM 模式的启发(Model-View-View-Model)。但是,根本没有必要将根实例命名为 “vm”。
相关推荐:
更多编程相关知识,请访问:编程入门!!
以上がVue.js の初心者向け面接の質問 25 選の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











vscode 自体は、定義にジャンプするための Vue ファイル コンポーネントをサポートしていますが、そのサポートは非常に弱いです。 vue-cli の構成では、多くの柔軟な使用法を記述することができるため、制作効率が向上します。しかし、これらの柔軟な記述方法により、vscode 自体が提供する関数がファイル定義へのジャンプをサポートできなくなります。これらの柔軟な記述方法に対応し、作業効率を向上させるために、Vue ファイルの定義へのジャンプをサポートする vscode プラグインを作成しました。

前書き: vue3 の開発では、reactive は応答性の高いデータを実装するメソッドを提供します。これは日常の開発で頻繁に使用される API です。この記事では、著者はその内部動作メカニズムを探ります。

Ace は、JavaScript で書かれた埋め込み可能なコード エディターです。 Sublime、Vim、TextMate などのネイティブ エディターの機能とパフォーマンスに匹敵します。あらゆる Web ページや JavaScript アプリケーションに簡単に埋め込むことができます。 Ace は Cloud9 IDE のメイン エディタとして維持されており、Mozilla Skywriter (Bespin) プロジェクトの後継です。

コンポーネント化とモジュール化の違い: モジュール化はコード ロジックの観点から分割され、コードの階層化された開発が容易になり、各機能モジュールの機能の一貫性が保証されます。コンポーネント化は UI インターフェイスの観点から計画され、フロントエンドのコンポーネント化により UI コンポーネントの再利用が容易になります。

Vue フレームワークを使用してフロントエンド プロジェクトを開発する場合、デプロイ時に複数の環境をデプロイすることになりますが、開発環境、テスト環境、オンライン環境で呼び出されるインターフェイス ドメイン名が異なることがよくあります。どうすれば区別できるでしょうか?それは環境変数とパターンを使用することです。

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

Vue3 動的コンポーネントで例外を処理するにはどうすればよいですか?次の記事では、Vue3 の動的コンポーネントの例外処理方法について説明します。

Vue3 のリリース以来、単語合成 API は Vue を書く学生の視野に入ってきました。合成 API が以前のオプション API よりもどれほど優れているかは誰もが聞いたことがあると思います。そして、@ のリリースにより、 vue/composition-api プラグイン、Vue2 学生もバスに乗れます. 次に、主に Response ref と Reactive を使用して、このプラグインがどのようにこれを実現しているかを詳細に分析します。
