vue3 プロジェクトを素早く構築し、関連機能を紹介する vite+ts の詳細な説明

vue3 プロジェクトを素早く構築し、関連機能を紹介する vite+ts の詳細な説明

ヴィテ

You Daは、Vue 3.0ベータ版のライブブロードキャストでviteツールを推奨し、次の点を強調しました。Vueシングルページコンポーネント用のパッケージ化されていない開発サーバーで、要求されたvueファイルをブラウザで直接実行できます。

非常に斬新で、このブログではvue3プロジェクトの構築に使用しています

Vite は、ネイティブ モジュール システム ESModule に基づいてオンデマンド コンパイルを実装する、最新のブラウザー向けの Web 開発および構築ツールです。生産環境におけるロールアップベースのパッケージング

  • サーバーを素早くコールドスタートする
  • インスタントホットモジュール交換 (HMR)
  • 真のオンデマンドコンパイル

ノード >= 10.16.0

建てる

viteを使用してプロジェクトを構築する

npm init vite-app <プロジェクト名>

typescript、vue-router@next、axios、eslint-plugin-vue、sassなどの関連プラグインをインストールします。

構成

vite.config.ts

vite.config.ts は @vue-cli プロジェクトの vue.config.js と同等です。

私はこれを単純に設定します:

'path' からパスをインポートする

モジュール.エクスポート = {
 エイリアス: {
 '/@/': path.resolve(__dirname, './src')
 },
 最適化依存関係: {
 含める: ['lodash']
 },
 プロキシ: {}
}

ルーター

srcの下に新しいルーターフォルダを作成し、そのフォルダにindex.tsを作成します。

'vue-router' から {createRouter、createWebHistory} をインポートします。

定数ルート = [
 {
 パス: '/'、
 名前: 'ホーム'、
 コンポーネント: () => import('/@/views/Home.vue')
 },
 {
 パス: '/lifeCycle',
 名前: 'ライフサイクル',
 コンポーネント: () => import('/@/views/LifeCycle.vue')
 }
]

エクスポートデフォルトcreateRouter({
 履歴: createWebHistory('/krry/'),
 ルート
})

tsタイプ

プロジェクトのルートディレクトリに新しいtsconfig.jsonを作成し、関連する設定を記述します。

{
 "コンパイラオプション": {
 ...// その他の構成「パス」: {
  "/@/*": [
  "ソース/*"
  ]
 },
 "ライブラリ": [
  「esnext」、
  「ドム」、
  "dom.iterable",
  「スクリプトホスト」
 ]
 },
 "含む": [
 "src/**/*.ts",
 "src/**/*.tsx",
 "src/**/*.vue",
 "src/types/images.d.ts",
 "テスト/**/*.ts",
 「テスト/**/*.tsx」
 ]、
 「除外」: [
 「ノードモジュール」
 ]
}

srcディレクトリに新しいtypesフォルダを作成し、tsタイプを設定する必要があります。

シムズvue.d.ts

モジュール '*.vue' を宣言します {}

画像.d.ts

モジュール '*.svg' を宣言します
モジュール '*.png' を宣言します
モジュール '*.jpg' を宣言します
モジュール '*.jpeg' を宣言します
モジュール '*.gif' を宣言します
モジュール '*.bmp' を宣言します
モジュール '*.tiff' を宣言します

メイン.ts

'vue' から {createApp} をインポートします。
'/@/router' からルーターをインポートします

'/@/App.vue' からアプリをインポートします

const app = createApp(App)
app.use(ルーター)
app.mount('#app')

そうすれば楽しくコードを書ける

vue3 の知識

設定

Vue3 では、すべての API がセットアップ関数に統合されています。セットアップ関数はライフサイクル関数の前に 1 回だけ実行されるため、セットアップ関数では現在のインスタンスを取得できず、これを使用して Vue2 の書き込みメソッドで定義されたメソッドを呼び出すことはできません。

2つのパラメータを受け入れます: props、context

// props - コンポーネントが受け取るプロパティ context - コンテキスト setup(props, context) {
 戻る {
 //バインドするデータとメソッド}
}

小道具

セットアップ関数内のプロパティはレスポンシブであり、新しいプロパティが渡されると更新されます。ただし、プロパティはレスポンシブであるため、ES6 の分解はプロパティのレスポンシブ性を排除するため使用できません。

プロパティを分解する必要がある場合は、セットアップ関数でtoRefsを使用することで安全に行うことができます。

'vue' から { toRefs } をインポートします

セットアップ(プロパティ) {
 const { title } = toRefs(props)
 console.log(タイトル.値)
}

コンテクスト

コンテキストは3つのコンポーネントプロパティを公開します: { attrs、slots、emit }
これは通常の JavaScript オブジェクトであり、リアクティブではないため、コンテキストで ES6 の構造化分解を安全に使用できます。

ライフサイクル

コンポーネントのライフサイクルフックにアクセスするには、先頭に「on」を付けます。

セットアップは beforeCreate および created ライフサイクル フックの周囲で実行されるため、これらを明示的に定義する必要はありません。つまり、これら 2 つのフックで記述するコードは、セットアップ関数内に直接記述する必要があります。

設定() {
 マウント時(() => {
 console.log('コンポーネントがマウントされました')
 })

 マウント解除時(() => {
 console.log('コンポーネントのアンインストール')
 })

 更新時(() => {
 console.log('コンポーネントの更新')
 })

 更新前に(() => {
 console.log('コンポーネントが更新されます')
 })

 アクティブ化(() => {
 console.log('keepAlive コンポーネントがアクティブ化されました')
 })

 onDeactivated(() => {
 console.log('keepAliveコンポーネントがアクティブ化されていません')
 })

 戻る {}
}

参照、反応的

ref は、単純な値に限定されたレスポンシブ データに共通の値をラップできます。内部的には、値はオブジェクトにラップされ、defineProperty によって処理されます。値を取得および設定するときは、.value を使用して設定する必要があります。this.$refs と記述する代わりに、ref を使用してコンポーネントの参照を取得できます。

reactive は複雑なデータをレスポンシブに処理します。戻り値はプロキシ オブジェクトです。setup 関数で返されるプロキシ オブジェクトは、テンプレートで簡単に使用できるように toRefs を使用して構造化できます。

次のように使用します。

<テンプレート>
 <div>
 <div>
  <ul v-for="eleList 内の ele" :key="ele.id">
  <li>{{ 要素名 }}</li>
  </ul>
  <button @click="addEle">追加</button>
 </div>
 <div>
  <ul v-for="todoList 内の要素" :key="ele.id">
  <li>{{ 要素名 }}</li>
  </ul>
  <button @click="addTodo">追加</button>
 </div>
 </div>
</テンプレート>

<スクリプト>
'vue' から { ref, reactive, toRefs } をインポートします。

エクスポートデフォルト{
 設定() {
 // 参照
 定数eleList = ref([])
 関数addEle() {
  len = eleList.value.lengthとします
  eleList.value.push({
  id:len,
  名前: 'ref increment' + len
  })
 }

 // リアクティブ
 const dataObj = リアクティブ({
  やることリスト: []
 })
 関数addTodo() {
  len = dataObj.todoList.lengthとします
  dataObj.todoList.push({
  id:len,
  名前: 'リアクティブ増分' + 長さ
  })
 }

 戻る {
  要素リスト、
  追加エレ、
  追加ToDo、
  ...toRefs(データオブジェクト)
 }
 }
}
</スクリプト>

計算、監視

// 計算された
合計を計算します(() => dataObj.todoList.length + eleList.value.length)
console.log('セットアップ参照は計算された値:' + sum.value)

//時計
時計(
 要素リスト、
 (現在の値、古い値) => {
 console.log('リスナー:', curVal, oldVal)
 },
 {
 深い: 本当
 }
)

ウォッチエフェクト

関数内で参照される応答データを応答的に追跡し、応答データが変更されたときに関数を再実行します。

定数カウント = ref(0)
// count の値が変更されると、コールバックが実行されます const stop = watchEffect(() => console.log(count.value))

// リスニングを停止する stop()

監視を停止することもできます。watchEffectは監視を停止するために実行できる関数を返します。

vue2 と同じ:

const unwatch = this.$watch('say', curVal => {})

// リスニングを停止する unwatch()

ルートの使用、ルーターの使用

'vue-router' から {useRoute, useRouter} をインポートします。

const route = useRoute() // vue2 の this.$route と同等
const router = useRouter() // vue2 の this.$router と同等

ルートは現在のルートデータを取得するために使用されます
ルータはルーティングジャンプに使用されます

ヴュークス

useStore を使用して vuex からストア オブジェクトを取得する場合は、ページ内で応答する前に vuex の状態を変更できるように、computed を使用してラップする必要があります。

'vuex' から {useStore} をインポートします。

設定(){
 const store = useStore() // vue2 の this.$store と同等
 store.dispatch() // ストアオブジェクトを通じて非同期タスクをディスパッチする store.commit() // ストアデータの変更をコミットする let category = computed(() => store.state.home.currentCagegory
 { カテゴリ } を返す
}

これで、vite+ts による vue3 プロジェクトの迅速な構築と関連機能の紹介に関するこの記事は終了です。vite+ts による vue3 の構築に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 完全な Vue3.0+ts プロジェクトを構築する手順
  • vite+vue3+element-plus プロジェクトをビルドする手順
  • Vue3.0 プロジェクト構築概要(詳細手順)
  • Vue3.0プロジェクトの構築と利用プロセス
  • vue3.0プロジェクトアーキテクチャを段階的に構築する方法を教えます
  • vue3.0 プロジェクトを素早く構築するための手順を完了する

<<:  Ubuntu 18.04にPython仮想環境をインストールする

>>:  MAC で Mysql5.7.10 のルートパスワードを変更する方法

推薦する

Vueはキャンバスを使用して画像圧縮アップロードを実現します

この記事では、キャンバスを使用して画像圧縮アップロードを実現するVueの具体的なコードを参考までに共...

MySQL の group by に関する簡単な説明

目次1. はじめに2. ユーザーテーブルを準備する2.1 グループ化ルール2.2 グループの使用2....

シンプルなショッピングカート機能を実現するjs

この記事の例では、簡単なショッピングカート機能を実現するためのjsの具体的なコードを参考までに共有し...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

ステップ 1: yum install httpd -y #httpd サービスをインストールします...

MySQL をインストールした後に調整する必要がある 10 のパフォーマンス設定項目

このブログでは、MySQL データベースをインストールした後に調整することが推奨される 10 のパフ...

Centos7にTenda U12ワイヤレスネットワークカードドライバーをインストールする際の問題を解決する

解決プロセス:方法1: CentOS7.3 のデフォルトのカーネル バージョンは低く、3.10.0-...

SNMP4J サーバー接続タイムアウト問題の解決策

弊社のネットワーク管理センターは管理センター兼サーバーとして機能します!各管理対象デバイスは、TCP...

HTML フォーマットの json のサンプルコード

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...

DockerでGPUを使用するプロセスの詳細な説明

目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...

HTML テーブルタグチュートリアル (24): 行の水平方向の配置属性 ALIGN

水平方向では、行の配置を左、中央、右に設定できます。基本的な構文<TR ALIGN="...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

JS 継承の詳細

目次序文準備する要約する継承方法プロトタイプ継承プロトタイプチェーン継承コンストラクタの借用(クラス...

vue3ソースコード解析の簡単な実装方法

目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...

ろうそくを溶かす(水滴)サンプルコードを実現する純粋な CSS

成果を達成する実装のアイデアフィルターのコントラストとぼかしを利用して溶ける効果を実現します。親要素...