初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?ルーティングの遅延読み込みにより、パッケージはすべてのページを一度に読み込むのではなく、現在のページのルーティング コンポーネントのみを読み込むことができます。 例えば、このように記述すると、ロード時にすべて読み込まれます。 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Win10 は Tsinghua ソースを使用して pytorch-GPU バージョンをすばやくインストールします (推奨)
01 ウィンターフレーク(個人のみ) 02 スノートップキャップ(業務用) 03 モディウス「フリ...
目次序文電話使用法成し遂げるシンプルな実装バージョン:アップグレード版:適用する使用法成し遂げるバイ...
Sysbench は、MySQL データベース ストレージ エンジン InnoDB のディスク I/...
システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...
ターゲットzabbix フロントエンド監視の iostat コマンドでデータの 1 つを表示します。...
今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...
目次問題の概要問題の再現問題の拡大結論は問題の概要今日、仕事中に、DBA が突然、SQL に暗黙的な...
ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...
:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...
Nginxをインストールするまずcentosイメージをプルしますdocker pull centos...
DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...
目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...
この記事では、MySQL で複数のテーブルを使用して 1 対多のクエリを使用して最新のデータを取得す...
以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...
質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...