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 ショートリンク

推薦する

Vue.js で AntV X6 を使用する手順の例

目次0x0 はじめに0x1 インストール0x2 ノードサイドバー0x3 統合例0x0 はじめにプロジ...

個人ブログシステムを構築するためのDockerの超シンプルな実装

Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...

SeataがMySQL 8バージョンを使用できない問題を解決する方法

考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...

Vue のクロスドメイン問題の処理と解決策の概要

ネットワークリクエストを送信すると、次の保存情報が表示されます。おめでとうございます。ドメインを越え...

MySqlデータベースの基礎知識のまとめ

目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...

Firefox または IE でスパン幅が決定されない場合の解決策

コードをコピーコードは次のとおりです。 <html xmlns="http://ww...

Vueはカスタム命令を使用してページの下部に透かしを追加します

プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...

nginx サーバーでの 502 不正なゲートウェイ エラーの原因のトラブルシューティング

パブリックアカウントのファンデータを同期してバッチプッシュするときに、サーバーがエラー502を報告し...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

CSS ポインターイベント属性の使用に関する詳細な説明

フロントエンド開発では、ユーザーと直接やり取りするため、ユーザーが操作がスムーズで快適だと感じ、ネイ...

MySQLテーブル構造を変更するコマンドを表示する

簡単な説明エディターはデータベースのエンコードが間違っているために問題に遭遇することが多く、これは頭...

MySQL共通インデックスとユニークインデックスの詳細な説明

シナリオ1. ID番号のフィールドを備えた市民システムを維持する2. ビジネス コードでは、重複する...

Vue の echarts ツールチップにクリック イベントを追加する詳細な説明

目次必要回避策1. ツールチップを設定する2. hookToolTip変数を定義する3. メソッド内...

Docker イメージのローカル Elasticsearch ポート操作へのアクセス

dockerスタックによってデプロイされたイメージサービスを使用すると、イメージを入力した後、理論的...

DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します

たとえば、イントラネットに Jenkins サーバーがある場合、そのサーバーにアクセスするには、その...