Vue 実践における実用的な小さな魔法のまとめ

Vue 実践における実用的な小さな魔法のまとめ

初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?

ルーティングの遅延読み込みにより、パッケージはすべてのページを一度に読み込むのではなく、現在のページのルーティング コンポーネントのみを読み込むことができます。

例えば、このように記述すると、ロード時にすべて読み込まれます。

const ルーター = 新しい VueRouter({
  ルート:[
    {
      パス: '/'、
      名前: 'ホーム'、
      コンポーネント: ホーム
    },
    {
      パス: '/about',
      名前: 'About'、
      コンポーネント: について
    }
  ]
})

したがって、上記のような書き方は避け、可能な限り遅延読み込みを使用するべきです。

遅延読み込みの記述とwebpackのインポートの組み合わせ

const ルーター = 新しい VueRouter({
  ルート:[
    {
      パス: '/'、
      名前: 'ホーム'、
      コンポーネント: () => import(/* webpackChunkName: "home" */ '../views/Home.vue')
    },
    {
      パス: '/about',
      名前: 'About'、
      コンポーネント: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
    }
  ]
})

Object.freeze というメソッドがあったことを覚えていますか?

すべての学生は、vue が初期化されると、データ内のデータがレスポンシブ データに変換されることを知っておく必要があります。ただし、ビジネス ロジックを作成する場合、初期化されると変更されないデータもあり、Vue でレスポンシブ データにする必要はまったくありません。そのため、Vue の初期化時に無駄な操作を回避するには、Object.freeze メソッドを使用してこれらの変更されていないデータを凍結する必要があります。

🌰

エクスポートデフォルト{
  データ:()=>({
    list:Object.freeze([{title:'変更する必要はありません。応答性は必要ありません'}])
  })
}

非同期コンポーネントは非常に強力なので、まだ使用したことがないのですか?

非同期コンポーネントを使用すると、初期化の開始時にコンポーネントをロードするのではなく、必要なときにのみコンポーネントをロードできます。これは、ルートの遅延ロードと同じ概念です。

🌰

エクスポートデフォルト{
  コンポーネント:{
    AsyncComponent:()=>import(/* webpackChunkName: "AsyncComponent" */ './Async')
  }
}

初めてロードされたパッケージには変更されたコンポーネントコードが含まれていません

クリックすると特定の動作がトリガーされ、導入されるパッケージは次のようになります

非同期コンポーネントを書くためのより完全な方法もあります

🌰

エクスポートデフォルト{
  コンポーネント:{
    非同期コンポーネント:()=>({
      コンポーネント:import(/* webpackChunkName: "AsyncComponent" */ './Async'),
      delay:200, // 遅延(ミリ秒単位)、デフォルトは 200
      timeout:3000, // 数ミリの読み込み後にタイムアウトし、エラー コンポーネントが発生します loading:LoadingComponent, // コンポーネントが読み込まれる前にエラーを表示します back:ErrorComponent // コンポーネントがタイムアウトしたときに表示します })
  }
}

これをまだ計算で使用していますか?

data 内のデータや computed 属性内のメソッド内のメソッドを取得するために this.xxx を使用する学生はまだたくさんいると思います。おそらく、彼らは vuex の状態とコミットを取得するために this.$store を使用し、ルート内のデータを取得するために this.$route を使用するでしょう。実際、目に見えないパフォーマンスの問題を引き起こす可能性のある、こうした醜い this を回避することができます。実際には、これを通じてアクセスできるデータは、computed の最初のパラメータで構造化できます。

🌰

エクスポートデフォルト{
   haha({$attrs、$route、$store、$listeners、$ref}){
     // 自分で印刷できる多くの属性を構築することもできます。 
   }
}

v-if と v-for を一緒に使用しないようにするにはどうすればよいですか?

同じ要素に v-if と v-for を同時に使用するのはなぜ避けるべきでしょうか? Vue のソースコードには、命令の優先順位を処理するコードセクションがあるためです。このコードセクションは、最初に v-for を処理し、次に v-if を処理します。したがって、同じレイヤーで 2 つの命令を一緒に使用すると、不要なパフォーマンスの問題が発生します。たとえば、このリストに 100 個のデータがあり、場合によっては表示する必要がない場合でも、vue は 100 個のデータを表示するためにループし、v-if を判断します。したがって、このような状況は避ける必要があります。

悪い🌰

    <h3 v-if="status" v-for="item in 100" :key="item">{{item}}</h3>

はい🌰

    <テンプレート v-if="ステータス">
        <h3 v-for="100 個のアイテム" :key="item">{{item}}</h3>
    </テンプレート>

強力な .sync 修飾子を使用してみませんか?

親コンポーネント内の子コンポーネントの表示と非表示を制御したい場合、依然としてプロパティとカスタム メソッドを渡していますか? これは非常に面倒です。sync 修飾子を試してみるのもよいでしょう。

🌰

 // 親コンポーネントテンプレート>
  <div>
    <Toggle :show.sync = 'show'></Toggle>
  </div>
</テンプレート>

//コンポーネントを切り替える <template>
  <div>
    <div v-if="表示">
    コンポーネントの表示と非表示</div>
  <button @click="test">コンポーネントを非表示</button>
  </div>
</テンプレート>
<スクリプト>

エクスポートデフォルト{
  プロパティ:['表示'],
  メソッド: {
    テスト(){
      this.$emit('update:show',false)
    }
  }
}
</スクリプト>

$attr と $listeners を使用すると、コンポーネントを水を得たアヒルのようにカプセル化できます。

多くの学生は $attr と $listeners をあまり使用しないかもしれませんが、実際には、これらを使用すると、一部のコンポーネント ライブラリのコンポーネントを再カプセル化できるため、非常に便利です。

両者の簡単な紹介は次のとおりです。

$attr: コンポーネントが prop に必要な属性だけでなく、prop 以外の属性も渡す場合、これらの属性は $attr に収集されます。

$listeners: コンポーネントがカスタム イベントを渡しても、子コンポーネントが発行によってトリガーされない場合、これらのカスタム メソッドは $listeners に収集されます。

これは、ElementUI の Tabel コンポーネントのシンプルな二次カプセル化です 🌰

<el-テーブル 
   v-bind="$attrs"
   v-on="$リスナー">
   <template v-for="列内の項目">
    <el-table-column v-bind="item" />
   </テンプレート>
</el-table>
<スクリプト>
エクスポートデフォルト{
  小道具:{
      カラム:{
        タイプ:配列、
        必須:true
      }
   }
}
<スクリプト>

v-model にも素晴らしい修飾子があります!

v-model には便利な修飾子が 3 つあります。使ったことがあるでしょうか。1 つは lazy、1 つは number、そして 1 つは trim です。

lazy: @input イベントを @blur イベントに変換できます

数値: 数値のみ入力できます

トリム: 両側のスペースを空ける

🌰

   //怠け者
   <input v-model.lazy="メッセージ" />
   //番号
   <input v-model.number="msg" />
   //トリム
   <input v-model.trim="msg" />

v-model のプロパティもカスタマイズできることをご存知ですか?

カスタム Input コンポーネントで v-model を使用する場合は、値を導入し、子コンポーネントで入力イベントをトリガーする必要があります。v-model のデフォルトの構文シュガーは、これら 2 つの組み合わせです。

🌰

// 親コンポーネント <テンプレート>
  <div>
    <CustomInput v-model='msg' />
  </div>
</テンプレート>

//カスタム入力

<テンプレート>
  <div>
    <input type="text" :value="値" @input="テスト">
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  プロパティ:['値'],
  メソッド: {
    テスト(e){
      this.$emit('input',e.target.value)
    }
  },
}
</スクリプト>

しかし、コンポーネントが入力ではなく、チェックボックスやラジオボタンの場合はどうなるでしょうか? 値と入力イベントを受け取るのではなく、より意味的なチェックと変更のイベントを受け取りたいのですが、どうすればよいでしょうか?

🌰

// 親コンポーネントを変更する必要はありません...
//カスタム入力
<テンプレート>
  <div>
    <input type="checkbox" :checked="チェック済み" @change="テスト">
  </div>
</テンプレート>
<スクリプト>
 プロパティ:['チェック済み'],
 モデル:{
    プロパティ: 'チェック済み'、
    イベント:'変更'
  },
  メソッド: {
    テスト(e){
      this.$emit('change',e.target.checked)
    }
  }
}
</スクリプト>

ページをスクロールするのにブラウザの scrollTop をまだ使用していますか?

ページのスクロール動作を操作するときに、最初に考えるのは scrollTop です。実際、2 番目のオプションとして、VueRouter によって提供される scrollBehavior フックがあります。

🌰

const ルーター = 新しい VueRouter({
  ルート:[...]、
  scrollBehavior(to,from,position){
      // 位置パラメータは単独で印刷できます。ブラウザの左矢印と右矢印をクリックすると、return{がトリガーされます。
          // ここでは多くのパラメータを返すことができます。いくつかを以下にリストします。詳細については公式ウェブサイトを確認してください x:100,
          y:100,
          セレクター:#app,
          オフセット:200,
          //等}
  }
})

子コンポーネントで定義したネイティブ イベントが有効になりませんか?

クリックなどの子コンポーネントのイベントをリッスンしたいのですが、どのようにクリックしても応答しないことがあります。なぜでしょうか?

🌰

<テンプレート>
    <div>
        <子 @click="テスト"></子>
    </div>
</テンプレート>
<スクリプト>
    方法:{
        テスト(){}
    }
</スクリプト>

このように記述すると、Vue はクリック イベントがカスタマイズされており、子コンポーネントの $emit('click') によってトリガーする必要があると認識します。親コンポーネントでトリガーしたい場合はどうすればよいでしょうか?ここでネイティブ修飾子が登場します。

🌰

<テンプレート>
    <div>
        <子 @click.native="test"></子>
    </div>
</テンプレート>
<スクリプト>
    方法:{
        テスト(){}
    }
</スクリプト>

キープアライブを使用してページステータスをキャッシュしてください。

キープアライブは、コンポーネントを切り替えるときに前のコンポーネントが破壊されないようにするのに役立ちます。管理バックグラウンド システムでよく使用されます。

🌰

<キープアライブ>
    <ルータービュー></ルータービュー>
</キープアライブ>

要約する

これで、Vue 実践における実用的なちょっとした魔法についての記事は終わりです。Vue の実践的なスキルについてさらに詳しく知りたい場合は、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue.js 実践的 Vuex 入門チュートリアル
  • Vueプロジェクトの実践的な概要
  • Vue 実戦 Vue ログイン認証実装コード
  • Vue.js コンポーネント間の実用的なデータ転送
  • Vue2.0でプロジェクトを公開する方法
  • Vueプロジェクトの異常な実戦記録をエレガントに処理する
  • Vueプロジェクトの構築と実践の詳細な説明
  • Vue-router プロジェクトの実践的な概要

<<:  Win10 は Tsinghua ソースを使用して pytorch-GPU バージョンをすばやくインストールします (推奨)

>>:  操作例 MySQL ショートリンク

推薦する

ダウンロードにおすすめの氷と雪のフォント 33 種類 (個人用および商用)

01 ウィンターフレーク(個人のみ) 02 スノートップキャップ(業務用) 03 モディウス「フリ...

JavaScript における call、apply、bind の実装原則の詳細な説明

目次序文電話使用法成し遂げるシンプルな実装バージョン:アップグレード版:適用する使用法成し遂げるバイ...

MySQLデータベースはsysbenchに基づくOLTPベンチマークテストを実装します

Sysbench は、MySQL データベース ストレージ エンジン InnoDB のディスク I/...

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

Linux Zabbixカスタム監視およびアラーム実装プロセスの分析

ターゲットzabbix フロントエンド監視の iostat コマンドでデータの 1 つを表示します。...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...

MySQLの整数および文字列インデックスの無効化または暗黙的な変換に関する簡単な説明

目次問題の概要問題の再現問題の拡大結論は問題の概要今日、仕事中に、DBA が突然、SQL に暗黙的な...

MySql5.7.21 インストールポイント記録メモ

ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...

MySQL における := と = の違いをグラフィカルに紹介

:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...

Docker は Python Flask+ nginx+uwsgi コンテナを構築します

Nginxをインストールするまずcentosイメージをプルしますdocker pull centos...

HTML 編集の基礎 (初心者必読)

DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...

TSで最も一般的な宣言マージ(インターフェースマージ)

目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...

MySQL の複数テーブル関連付け 1 対多クエリを使用して最新のデータを取得する方法の例

この記事では、MySQL で複数のテーブルを使用して 1 対多のクエリを使用して最新のデータを取得す...

docker で golang イメージに基づいて ssh サービスを構築する方法

以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...

Vueフォームで画像を処理する方法

質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...