window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() Vue.jsアプリ改善。いくつかの実用的なヒント - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2020-10-30
ソフトウェア開発

Vue.jsアプリの改善。実用的なヒント

The Codest

ドミニク・グジェジエルスキ

シニア Software Engineer

Vueは、ユーザーインターフェイス構築のための急成長中のプログレッシブフレームワークです。GitHubで最も多くのスターを獲得したJavaScriptフレームワークとなり、同ポータルで2016年と2017年に最も高いスターを獲得したプロジェクトとなりました。

アプリケーションの作成 Vue しかし、質の高いアプリケーションを作りたいのであれば、もう少しチャレンジが必要だ。

一員であること The Codest チーム の真の支持者である。 Vueテクノロジーそこで、いくつか紹介したい。 ヒント (Vueの公式ドキュメントからコピーしたものではありません)。 コード 品質と Vueアプリケーションの性能.

まず、VueスタイルガイドとESLintを適用してください。

すでに言われていることを繰り返したくはない。Vueのドキュメントにスタイルガイドがある:
Vue 2ドキュメント - スタイルガイド または
Vue 3ドキュメント - スタイルガイド

そこには4つのルールカテゴリーがある。私たちはそのうちの3つを本当に大切にしている:

  • エッセンシャル エラーを防ぐルール
  • おすすめ そして 強く推奨 ベストプラクティスを維持するためのルール 品質向上 そしてコードの読みやすさ。

と思うかもしれない!すべてのルールを覚えなければならないのか?"もちろんそんなことはありません。ESLintを使えばそのようなルールの面倒を見ることができます。ESLintの設定ファイルですべてを適切に設定するだけです。 を使用することをお勧めします。 おすすめ プリセット を使用すると、良いプラクティスでアプリを構築するのに役立つルールのセットを完全に無料で入手できます。設定方法は?

デフォルトでは 拡張 キーに置き換えてください。 "plugin:vue/essential" と "plugin:vue/推奨"それだけだ。

もちろん、ESLintだけですべてを処理することはできないので、覚えておくべきルールがいくつかあります。例えば

  • 一貫性のあるネーミング、
  • ケバブケースで命名されたイベント、
  • 接頭辞 $_名前空間 プラグインやミックスインなどのプライベートプロパティ、
  • 単一ファイルコンポーネントのトップレベル要素の順序。

複数のv-ifを使用しない

条件付きで1つ以上の要素をレンダリングする必要がある場合もあるが、よくそういうことを書く人がいる:

内容

内容

内容

もっとエレガントに書けるから必要ない:

<code> <template v-if="condition">
   <div>内容</div>
   <div>内容</div>
   <div>内容</div>
 </template>

しかし、ルート要素としてそれを行いたい場合はどうだろうか?それは Vueを使うことはできない。 <テンプレート を使うことができる。場合によってはdivで包むだけで十分なこともある。

それでもいいのだが、htmlのセマンティックの関係で、要素をdivで囲むことができない場合がある。

  • 。 の直接の子でなければならない。
      または
        ).だから、私たちは書かなければならない:

         
      1. (( item.name ))
      2. ...といったエラーが表示される:

        Vue jsコード

        私たちは次のように対処することができる。 JSXと機能コンポーネントを使用また、ブール値を渡せばv-ifを置き換える。

        コンポーネントにAPIコール・ハンドラを書くな

        実は、これはコンポーネントでやってはいけないことの一例に過ぎない。コンポーネント・ロジックの中で局所的に必要なことを行うだけでよい。外部にある可能性のあるメソッドはすべて分離し、例えばビジネス・ロジックなどのコンポーネントの中だけで呼び出すようにする。

        例

        このような方法ではなく

        created() (
        this.fetchArticles();
        )、
        メソッド: (
         非同期fetchArticles() (
          try (
            const data = await axios.get(url);
            this.articles = data.articles;
            ) catch (e) (
            // エラー処理
            )
          )
        )

        APIの結果を返す適切なメソッドを呼び出してください:

         async fetchArticles() (
           try (
             this.articles = await ArticlesService.fetchAll();
           ) catch (e) (
             // エラーを処理する
           )
          )

        大量の小道具の代わりにスロットを使う

        プロップを使うだけで十分な場合もありますが、効率的でない場合もあります。それは、コンポーネントを思い通りに動作させるために、多くのpropsを追加しなければならない状況です。最も単純な例は、ボタンコンポーネントです。間違いなく、アプリケーションのどこでも使えるコンポーネントです。では、このようなボタンコンポーネントを考えてみましょう。

        
        (( テキスト ))

        この段階では、テキストプロップだけを受け付けるシンプルなコンポーネントだ。しかし、ボタンにはアイコンが必要なので、これでは不十分かもしれません。この場合、もう2つのプロップを追加する必要があります(2つというのは、テキストの前後に追加するオプションを持ちたいからです)。コンポーネントはこのようになります:

        
        (( テキスト ))

        プロップが3本しかないのは悪くないが...。

        もしローディングインジケーターが必要なら?別のプロップを追加しなければならない。そして、それはすべての新機能に対してだ!コンポーネントの数の増加についていくのは大変だと思いますか?そうですね!

        代わりにスロットを使おう.

        もっと簡単でしょう?でも、アイコンの追加機能はどうやったら使えるの?とても簡単だ!このようにコンポーネントを使うだけだ:

        バック
        
        次へ

        パフォーマンスを向上させる簡単な方法

        簡単に実践できるヒントをいくつか紹介しよう。

        遅延ロード・ルート

        管理者だけが利用可能なルートや、特定のアクセス権を持つユーザーだけが利用可能なルートがあり、他のルートよりもアクセス数が少ないことがあります。これらは遅延ロードルートを使うのに最適なケースです。

        コンポーネント・プロパティでarrow関数を使うだけで、インポート関数を返すことができます:

         export default new VueRouter (
           (
             mode: 'history'、
             routes:[
               (
                 path: '/landing'、
                 component: () => import('../pages/p-welcome')、
                 name: 'welcome'
               ),
          ...

        の代わりだ:

        import PWelcome from '@/pages/p-welcome';
        
        エクスポート・デフォルト new VueRouter (
        (
        mode: 'history'、
        routes:[
        (
        path: '/landing'、
        component:PWelcome, //インポートされたコンポーネント
        name: 'welcome'
        ),

        Vueコンポーネントの遅延ロード

        同じような状況は Vueコンポーネント.このように、単一ファイルのコンポーネントを簡単にインポートすることができる:

        const lazyComponent = () => import('pathToComponent.vue')
        エクスポート default (
        コンポーネントを(lazyComponent )
        )
        
        // 別の構文
        エクスポートデフォルト (
        コンポーネント(
        lazyComponent: () => import('pathToComponent.vue')
        )
        )

        そのコンポーネントの遅延ロードのおかげで、要求されたときだけダウンロードされる。例えば、v-ifを持つコンポーネントがある場合、コンポーネントがレンダリングされる場合にのみ要求されます。つまり、v-ifの値がtrueでない限り、コンポーネントはロードされない。そのため、遅延インポートは JavaScript ファイル.

        ボーナスだ: Vue CLI 3+を使用すると、遅延ロードされたすべてのリソースがデフォルトでプリフェッチされます!

        vue js 開発

        属性プロップの代わりに透明なラッパーを使う

        このようなコンポーネントを考えてみよう:

         <テンプレート
           
         </template

        何の問題もなく、このように使うことができる:

        または


        なぜなら Vue を使うと、propsとして宣言していなくても、html属性をコンポーネントに渡すことができます。html属性はコンポーネントのルート要素(この場合はinput)に適用されます。

        問題は、入力コンポーネントを拡張するときに現れる:

        <code> <template>
           <div class="form-group">
             <label :for="id">(( ラベル ))</label>
             <input
               :id="id"
               :value="value"
               class="base-input"
               @input="$emit('input', $event.target.value)"
             >
           </div>
         </template>

        さて、このようにコンポーネントを使う:

        なぜなら、typeとplaceholderはdiv(ルート要素)に適用され、意味をなさないからです。というのも、型とプレースホルダはdiv(ルート要素)に適用されるからです。必要な小道具を追加しよう!」と最初に考えるかもしれませんし、もちろんそれはうまくいくでしょう。 タイプ, オートコンプリート, プレースホルダ, オートフォーカス, 使用不能, 入力モードなどと書くと、すべてのhtml属性に対してpropsを定義しなければなりません。私は個人的にこの長い方法が好きではないので、もっと良い方法を探そう!

        我々は、この問題全体を たった2行だ。

        <template>
          <div class="form-group">
            <label :for="id">(( ラベル ))</label>
            <!-- pay attention to v-bind="$attrs" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              @input="$emit('input', $event.target.value)"
            >
          </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false, // <- pay attention to this line
          props: ['value', 'label', 'id']
        );
        </script>

        を使うことができる。 v-bind="$attrs" に直接属性を渡します。 <入力 大量のプロップを宣言することなく。また、オプション inheritAttrs: false を使用して、ルート要素に属性を渡さないようにすることができます。この入力にイベントリスナーを追加する必要がある場合はどうでしょうか?ここでも、propsやカスタムイベントで処理することができますが、もっと良い解決策があります。

        <template>
          <div class="form-group">
            <label :for="id">(( ラベル ))</label>
            <!-- pay attention to v-on="listeners" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              v-on="listeners"
            >
        </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false,
          props: ['value', 'label', 'id'],
          computed: (
            listeners() (
              return (
                ...this.$listeners,
                input: event => this.$emit('input', event.target.value)
              );
            )
          )
        );
        </script>

        リスナー用のコンポーネントを返し、入力リスナーを追加する新しいcomputedプロパティがある。その計算された入力を使うには v-on="リスナー".

        作成されたフックとウォッチャーを一緒に使うのではなく、即時オプションでウォッチャーを使う。

        作成された(あるいはマウントされた)フックに何らかのデータをフェッチすることはよくあるが、その場合、例えばページネーションの現在のページなど、プロパティが変更されるたびにそのデータをフェッチする必要がある。このように書く人もいる:

        もちろん、それは機能するのだが、ベストなアプローチではない。では、どうすればリファクタリングできるのか、悪くないアプローチの例を見てみよう:

        上のバージョンの方が優れているのは、別のメソッドは必要なく、watchedPropertyを変更するために呼び出されるべきメソッドに名前を付けただけだからだ。

        さらに良い方法がある:

        createdフックを取り除いた。immediate'オプションを追加することで、fetchDataメソッドのコンポーネント呼び出しを観測開始直後(createdフックの少し前、beforeCreatedの後)に行うので、createdフックの代わりに使うことができます。

        Vue.jsのヒントまとめ

        これらのヒントは、あなたのアプリケーションを完璧にするものではありませんが、それらを使用することで、迅速になります。 コードの質を高める.また、上記の例から興味を引くものを見つけてほしい。

        なお、この記事のために簡略化したものもある。

        続きを読む

        JavaScriptは完全に死んだインターネット上のある男

        最も人気のあるReactフックをさらに深く見る

        JavaScriptを使用できるソフトウェア・プロジェクト

  • 関連記事

    ソフトウェア開発

    将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

    The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

    ザ・コデスト
    ソフトウェア開発

    ラトビアを拠点とするソフトウェア開発企業トップ10社

    ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

    thecodest
    エンタープライズ&スケールアップ・ソリューション

    Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

    outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

    thecodest
    ソフトウェア開発

    ポーランドにおけるアウトソーシングの究極ガイド

    ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

    ザ・コデスト
    エンタープライズ&スケールアップ・ソリューション

    IT監査ツール&テクニック完全ガイド

    IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

    The Codest
    ヤクブ・ヤクボヴィッチ CTO & 共同創設者

    ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

      会社概要

      The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

      イギリス - 本社

      • オフィス 303B, 182-184 High Street North E6 2JA
        イギリス、ロンドン

      ポーランド - ローカル・テック・ハブ

      • ファブリチュナ・オフィスパーク、アレハ
        ポコジュ18、31-564クラクフ
      • ブレイン・エンバシー, コンストルクトースカ
        11, 02-673 Warsaw, Poland

        The Codest

      • ホーム
      • 会社概要
      • サービス
      • Case Studies
      • ノウハウ
      • 採用情報
      • 辞書

        サービス

      • アドバイザリー
      • ソフトウェア開発
      • バックエンド開発
      • フロントエンド開発
      • Staff Augmentation
      • バックエンド開発者
      • クラウドエンジニア
      • データエンジニア
      • その他
      • QAエンジニア

        リソース

      • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
      • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
      • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
      • CTOとCIOの課題は?
      • The Codest
      • The Codest
      • The Codest
      • Privacy policy
      • ウェブサイト利用規約

      著作権 © 2025 by The Codest。無断複写・転載を禁じます。

      jaJapanese
      en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese