目次
#1. アイテムのリストをレンダリングするときの「key」属性の役割と重要性は何ですか?
2. テンプレート内の生の HTML をどのようにレンダリングしますか?
Vue.js
3. vue-loader とは何ですか?
4.ミックスインとは何ですか?
5. 開発中に、Vue プログラムとバックエンド API サーバーが同じホスト上で実行されていない場合に API リクエストをプロキシする方法。 Vue-CLI 3 を使用したセットアップを想定していますか?
6. prop 如何指定其类型要求?
7. 什么是虚拟 DOM?
8. 什么是 Vue 插件?
9. 什么是渲染函数?举个例子。
Fruit Basket
10. 哪个生命周期 hook 最适合从 API 调用中获取数据?
11. 什么时候调用 “updated” 生命周期 hook ?
12. 在 Vue 实例中编写生命周期 hook 或其他 option/propertie 时,为什么不使用箭头函数?
13. 什么时候使用keep-alive元素?
14. 在大型 Vue 程序中管理状态的推荐方法是什么?为什么?
15. 什么是异步组件?
ホームページ ウェブフロントエンド Vue.js Vue.js の高度な面接の質問 15 選

Vue.js の高度な面接の質問 15 選

Sep 27, 2020 pm 02:18 PM
vue.js 面接の質問

この記事では、Vue.js の高度な面接の質問を 15 個紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Vue.js の高度な面接の質問 15 選

#1. アイテムのリストをレンダリングするときの「key」属性の役割と重要性は何ですか?

key 属性を使用すると、項目リストをレンダリングするときに Vue が各 Vnode を追跡できるようになります。キーの値は一意である必要があります。

key 属性が使用されておらず、リストの内容が変更された場合 (リストの並べ替えなど)、仮想 DOM は要素を移動するのではなく、更新されたデータをノードにパッチして変更を反映します。上か下。これはデフォルトのモードであり、非常にうまく機能します。

一意のキー値 IS が指定されている場合、キーが削除された場合 (例: list )、対応する要素ノードも破棄または削除されます。

次の図に注目してください:

Vue.js の高度な面接の質問 15 選

子コンポーネントのリストをレンダリングする親コンポーネントがあります。 3 つのリスト項目が 3 つの子コンポーネント ノードとしてレンダリングされていることがわかります。これらの各サブコンポーネントには、span タグと入力ボックスが含まれており、ローカル状態オブジェクト (オプション) も含まれる場合があります。ここで 2 つのケースを確認してみましょう:

key 属性が使用されていない場合: たとえば、リストが並べ替えられた場合、Vue はこれらのノードを移動せずに、並べ替えられたデータを既存の 3 つのノードにパッチするだけです。この方法は、ユーザーがこれらの 1 つ以上のサブコンポーネントのローカル状態を入力または変更しない限り、正常に機能します。したがって、ユーザーがコンポーネント番号 3 の入力ボックスに入力したと仮定すると、リストの順序を変更した後、コンポーネント番号 3 の Span タグの内容は変更されますが、入力ボックスは、ユーザーが入力した内容およびステータス データとともにここに残ります。これは、Vue がコンポーネント番号 3 を認識せず、表示された更新データ (span タグの内容) に再パッチを適用するだけであるためです。

子コンポーネントで key 属性を使用すると、Vue はコンポーネントの ID を認識し、リストの順序が変更されると、ノードはパッチされる代わりに移動されます。これにより、手動で編集した入力フィールドとコンポーネント全体が新しい場所に確実に移動されます。

コンポーネントまたは要素を条件付きでレンダリングする場合、key 属性を使用して要素の一意性を Vue に通知し、要素が新しいデータで再パッチされないようにすることもできます。

2. テンプレート内の生の HTML をどのようにレンダリングしますか?

テンプレート内のコンテンツを出力する一般的な方法は、mustache 構文タグを使用して、メソッド、プロパティ、またはデータ変数からデータを出力することです。ただし、mustache タグはテキストをレンダリングします。 Mustache タグを使用して HTML をレンダリングしようとすると、テキスト文字列としてレンダリングされ、解析されません。コンテンツを HTML にレンダリングして解析するには、以下に示すように v-html ディレクティブを使用できます。

テンプレート

<p id="app" v-html=”title”></p>
ログイン後にコピー

アプリ

new Vue({
    el: &#39;#app&#39;,
    data: {
      title: &#39;<h1 id="Vue-js">Vue.js</h1>&#39;
    }
});
ログイン後にコピー

出力

Vue.js

上記の例に示すように、v-html ディレクティブはすべての HTML を解析し、その結果、上記のステートメントがオンデマンドで表示されます。開発者は、v-html を使用する前にそれを理解する必要があります。 v-html を不適切に使用すると、Web サイトがインジェクション攻撃にさらされる可能性があり、外部ソースから悪意のあるコードが挿入されて実行される可能性があります。

3. vue-loader とは何ですか?

Vue-loader は Webpack のローダー モジュールで、これを使用すると .vue ファイル形式で単一ファイル コンポーネントを作成できます。単一ファイルのコンポーネント ファイルには、テンプレート、スクリプト、スタイルの 3 つの部分があります。 vue-loader モジュールを使用すると、webpack が個別のローダー モジュール (SASS ローダーや SCSS ローダーなど) を使用して各セクションを抽出して処理できるようになります。この設定により、.vue ファイルを使用してプログラムをシームレスに作成できるようになります。

vue-loader モジュールでは、静的リソースをモジュールの依存関係として扱い、webpack ローダーを使用して処理することもできます。開発中のホットリロードも可能です。

4.ミックスインとは何ですか?

ミックスインを使用すると、Vue コンポーネントのプラグイン可能で再利用可能な機能を作成できます。ライフサイクル フックやメソッドなどのコンポーネント オプションのセットを複数のコンポーネント間で再利用したい場合は、それをミックスインとして記述し、コンポーネント内で単純に参照できます。その後、ミックスインの内容がコンポーネントにマージされます。ミックスインでライフサイクル フックを定義すると、実行時にコンポーネント自体のフックよりも優先されます。

5. 開発中に、Vue プログラムとバックエンド API サーバーが同じホスト上で実行されていない場合に API リクエストをプロキシする方法。 Vue-CLI 3 を使用したセットアップを想定していますか?

localhost:4040 で Node.js バックエンド サーバーが実行されているとします。これがプロキシされ、コンポーネントからアクセスできるようにするには、vue.config.js ファイルを構成し、次のように devServer セクションを含めます。下に示された:###

假设我们有一个运行在 localhost:4040 上的 Node.js 后端服务器。为了确保代理并可以从组件中访问它,可以配置 vue.config.js 文件并包含 devServer 部分,如下所示:

在 vue.config.js 文件中:

module.exports: {
    devServer: {
        proxy: {
            &#39;/api&#39;: { 
                target: ‘http://localhost:4040/api’, 
                changeOrigin: true 
            }
        }
    }
}
ログイン後にコピー

6. prop 如何指定其类型要求?

通过实现 prop 验证选项,可以为单个 prop 指定类型要求。这对生产没有影响,但是会在开发阶段发出警告,从而帮助开发人员识别传入数据和 prop 的特定类型要求的潜在问题。

配置三个 prop 的例子:

props: {
    accountNumber: {
        type: Number,
        required: true
    },
    name: {
        type: String,
        required: true
   },
   favoriteColors: Array
}
ログイン後にコピー

7. 什么是虚拟 DOM?

文档对象模型或 DOM 定义了一个接口,该接口允许 JavaScript 之类的语言访问和操作 HTML 文档。元素由树中的节点表示,并且接口允许我们操纵它们。但是此接口需要付出代价,大量非常频繁的 DOM 操作会使页面速度变慢。

Vue 通过在内存中实现文档结构的虚拟表示来解决此问题,其中虚拟节点(VNode)表示 DOM 树中的节点。当需要操纵时,可以在虚拟 DOM的 内存中执行计算和操作,而不是在真实 DOM 上进行操纵。这自然会更快,并且允许虚拟 DOM 算法计算出最优化的方式来更新实际 DOM 结构。

一旦计算出,就将其应用于实际的 DOM 树,这就提高了性能,这就是为什么基于虚拟 DOM 的框架(例如 Vue 和 React)如此突出的原因。

8. 什么是 Vue 插件?

Vue 插件允许开发人员构建全局级别的功能并将其添加到 Vue。用于向程序添加可以全局访问的方法和属性、资源,选项,mixin 以及其他自定义 API。 VueFire 是 Vue 插件的一个例子,该插件添加了 Firebase 特定的方法并将其绑定到整个程序。之后 firebase 函数可在程序结构中的任何位置的 this 上下文中使用。

9. 什么是渲染函数?举个例子。

Vue 允许我们以多种方式构建模板,其中最常见的方式是只把 HTML 与特殊指令和 mustache 标签一起用于响应功能。但是你也可以通过 JavaScript 使用特殊的函数类(称为渲染函数)来构建模板。这些函数与编译器非常接近,这意味着它们比其他模板类型更高效、快捷。由于你使用 JavaScript 编写渲染函数,因此可以在需要的地方自由使用该语言直接添加自定义函数。

对于标准 HTML 模板的高级方案非常有用。

这里是用 HTML 作为模板的 Vue 程序

new Vue({
  el: &#39;#app&#39;,
  data: {
    fruits: [&#39;Apples&#39;, &#39;Oranges&#39;, &#39;Kiwi&#39;]
  },
  template:
      `<p>
         <h1 id="Fruit-nbsp-Basket">Fruit Basket</h1>
         <ol>
           <li v-for="fruit in fruits">{{ fruit }}</li>
         </ol>
      </p>`
});
ログイン後にコピー

这里是用渲染函数开发的同一个程序:

new Vue({
  el: &#39;#app&#39;,
  data: {
    fruits: [&#39;Apples&#39;, &#39;Oranges&#39;, &#39;Kiwi&#39;]
  },
  render: function(createElement) {
    return createElement(&#39;p&#39;, [
      createElement(&#39;h1&#39;, &#39;Fruit Basket&#39;),
      createElement(&#39;ol&#39;, this.fruits.map(function(fruit) { 
        return createElement(&#39;li&#39;, fruit); 
      }))
    ]);
  }
});
ログイン後にコピー

输出:

Fruit Basket

  1. Apples
  2. Oranges
  3. Kiwi

在上面的例子中,我们用了一个函数,它返回一系列 createElement() 调用,每个调用负责生成一个元素。尽管 v-for 指令在基于 HTML 的模板中起作用,但是当使用渲染函数时,可以简单地用标准 .map() 函数遍历 fruits 数据数组。

10. 哪个生命周期 hook 最适合从 API 调用中获取数据?

尽管这取决于组件的用途及,但是创建的生命周期 hook 内通常非常适合放置 API 调用。这时可以使用组件的数据和响应性功能,但是该组件尚未渲染。

11. 什么时候调用 “updated” 生命周期 hook ?

在更新响应性数据并重新渲染虚拟 DOM 之后,将调用更新的 hook。它可以用于执行与 DOM 相关的操作,但是(默认情况下)不能保证子组件会被渲染,尽管也可以通过在更新函数中使用 this.$nextTick 来确保。

12. 在 Vue 实例中编写生命周期 hook 或其他 option/propertie 时,为什么不使用箭头函数?

箭头函数自己没有定义 this 上下文,而是绑定到其父函数的上下文中。当你在 Vue 程序中使用箭头函数(=>)时,this 关键字病不会绑定到 Vue 实例,因此会引发错误。所以强烈建议改用标准函数声明。

13. 什么时候使用keep-alive元素?

当由于数据属性或其他某种响应状态而动态切换组件时,每次将它们切换到渲染状态时,都会被重新渲染。尽管你可能需要这种行为,但在某些情况下重新渲染可能是不合适的。例如在创建时从 API 调用中引入数据的组件。你可能不希望每次动态切换这个组件进行渲染时都调用此 API。这时你可以将组件包含在 keep-alive 元素中。keep-alive 元素缓存该组件并从那里获取它,而不是每次都重新渲染它。

14. 在大型 Vue 程序中管理状态的推荐方法是什么?为什么?

当程序在功能和代码方面不断增长时,状态管理会变得困难,并且使用无穷无尽的下游网络 prop 和上游事件当然不是明智的决定。在这种情况下,有必要将状态管理转移到中央管理系统。 Vue 生态系统中提供了 Vuex,它是官方的状态管理库,也是推荐用于集中存储状态的模式。

Vuex 允许维护中央状态。组件将 Vuex 用作响应性数据存储,并在状态更新时进行更新。多个或者不相关的组件可以依赖于相同的中央存储。

在这种情况下,Vue 充当纯 View 层。要修改状态,视图层(例如按钮或交互式组件)需要发出 Vuex Action,然后执行所需的任务。为了更新或修改状态,Vuex 提供了 Mutations

这个工作流程的目的是留下可用的操作痕迹。

15. 什么是异步组件?

当大型程序使用大量组件时,从服务器上同时加载所有组件可能是没有意义的。在这种情况下,Vue 允许我们在需要时定义从服务器异步加载的组件。在声明或注册组件时,Vue 接受提供 Promise 的工厂函数。然后可以在调用该组件时对其进行“解析”。

通过仅加载基本组件并把异步组件的加载推迟到未来的调用时间,可以节省带宽和程序加载时间。

这是一个异步组件的简单示例。

new Vue({
    components: {
        ‘tweet-box’: () => import(‘./components/async/TweetBox’)
    }
});
ログイン後にコピー

当以这种方式使用时,Webpack 的代码拆分将用于提供此功能。

原文地址:https://www.zeolearn.com/interview-questions/vue-js

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上がVue.js の高度な面接の質問 15 選の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

vite が .env ファイルを解析する方法についての詳細な説明 vite が .env ファイルを解析する方法についての詳細な説明 Jan 24, 2023 am 05:30 AM

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

Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Apr 24, 2023 am 10:52 AM

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

vue3 の reactive() について詳しく話しましょう vue3 の reactive() について詳しく話しましょう Jan 06, 2023 pm 09:21 PM

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

Vue3 で単体テストを作成する方法を調べる Vue3 で単体テストを作成する方法を調べる Apr 25, 2023 pm 07:41 PM

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

Go 言語の面接でよくある 5 つの質問と回答 Go 言語の面接でよくある 5 つの質問と回答 Jun 01, 2023 pm 08:10 PM

近年非常に人気が高まっているプログラミング言語として、Go言語は多くの企業や企業の面接で注目の的となっています。 Go 言語の初心者にとって、面接プロセス中に関連する質問にどのように答えるかは、検討する価値のある問題です。初心者向けに、Go 言語の面接でよくある 5 つの質問と回答を示します。 Go言語のガベージコレクションの仕組みを紹介してください。 Go 言語のガベージ コレクション メカニズムは、マーク スイープ アルゴリズムと 3 色マーキング アルゴリズムに基づいています。 Go プログラムのメモリ容量が足りない場合、Go ガベージ コレクターが

JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) Mar 23, 2023 pm 07:53 PM

Vue.js では、開発者は、JSX 構文とテンプレート構文という 2 つの異なる構文を使用してユーザー インターフェイスを作成できます。どちらの構文にもそれぞれ長所と短所があるので、それらの違い、長所と短所について説明します。

vue がファイル スライス アップロードを実装する方法の簡単な分析 vue がファイル スライス アップロードを実装する方法の簡単な分析 Mar 24, 2023 pm 07:40 PM

実際の開発プロジェクトのプロセスでは、比較的大きなファイルをアップロードする必要がある場合がありますが、その場合はアップロードが比較的遅くなり、バックグラウンドでフロントエンドがファイルのスライスをアップロードする必要がある場合があります。これは非常に簡単です。たとえば、1Aギガバイトのファイル ストリームはいくつかの小さなファイル ストリームに分割され、インターフェイスはそれぞれの小さなファイル ストリームを配信するように要求されます。

Vue2実装APIの原理を解析する Vue2実装APIの原理を解析する Jan 13, 2023 am 08:30 AM

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

See all articles