UniApp 入門ガイド (Vue3 + TypeScript)

UniApp (Vue3 + TypeScript) 入門

1. プロジェクトのセットアップ

1.1 プロジェクトの作成と起動

# HBuilderXでの開発を推奨します
# sass、TypeScriptなどの必要なプラグインは自動的にインストールされます
# 注意: Viteは現在WeChatミニアプリをサポートしておらず、Vue3のテンプレートは複数ルートタグをサポートしていません
npx degit dcloudio/uni-preset-vue#vite-ts project-name
npm install
npm run dev

1.2 コードフォーマット設定

開発環境の設定を調整します。

  • インデントを2スペースに設定: ツール → 設定 → 一般設定 → タブサイズ: 2
  • import文の波括弧を折り返さない: ツール → 設定 → プラグイン設定 → JSBeautifyルールのカスタマイズ → "brace_style": "collapse,preserve-inline"

2. 主要な概念

2.1 基本規約

  • ページファイルはVueの単一ファイルコンポーネント規約に従います。
  • コンポーネントタグはミニアプリ規約に近いです。
  • APIインターフェースはWeChatミニアプリ規約に近いです。
  • データバインディングとイベント処理はVue.js規約を使用します。

2.2 条件付きコンパイル

プラットフォーム固有のコードを記述するための構文です。

構文例 説明
#ifdef APP-PLUS
// コード
#endif
APPプラットフォームのみで実行されるコード
#ifndef H5
// コード
#endif
H5プラットフォーム以外で実行されるコード
#ifdef H5 || MP-WEIXIN
// コード
#endif
H5またはWeChatミニアプリプラットフォームで実行されるコード

2.3 プロジェクト構造

ディレクトリ/ファイル 役割
pages ページコンポーネントを格納
static 静的リソースファイルを格納
App.vue アプリケーションのエントリーポイント (ミニアプリのapp.jsに相当)
main.js アプリケーションエントリー、Vueの登録など
manifest.json プロジェクト設定
pages.json ページ設定
common 共通ユーティリティファイルを格納
components カスタムコンポーネントを格納
store Vuex状態管理ファイルを格納
unpackage コンパイル済みファイルを格納

2.4 テンプレート構文

2.4.1 ディレクティブ
  • v-bind: :に省略可能。コンポーネントの属性をデータ変数にバインドします (dataオプションで定義、関数形式を推奨)。式を使用する場合はv-bindが必要です。
  • v-on: @に省略可能。イベントをハンドラー関数にバインドします。
  • v-model: 双方向データバインディングを実装します。
  • v-if: 条件付きレンダリング。要素のマウント/アンマウントを制御します。
  • v-show: 条件付き表示。CSSのdisplayプロパティを制御します。
  • v-for: リストのレンダリングを行います。
2.4.2 タグマッピング
UniAppタグ 標準HTML/Vueタグ
view div
text span
image img
block template (非ルートタグとして)
2.4.3 単位

WeChatミニアプリの単位であるrpx (レスポンシブピクセル) を使用できます。基準は画面幅750rpxです。

2.4.4 コンポーネント例
<template>
  <view class="container">
    <text class="title-text">{{ message }}</text>
    <button @click="handleClick">クリック</button>
  </view>
</template>

<script lang="ts">
import { formatTimestamp } from "@/utils/helpers";
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const message = ref('Welcome');

    const handleClick = () => {
      console.log(message.value = formatTimestamp(Date.now())));
    };

    return {
      message,
      handleClick
    };
  }
});
</script>

<style lang="scss" scoped>
.container {
  width: 375rpx;
}

.title-text {
  // uni.scssグローバルスタイルファイルは自動インポートされます
  color: $uni-color-primary;
}
</style>
2.4.5 カスタムコンポーネント

カスタムコンポーネントはcomponentsディレクトリに配置します。グローバル登録は不要です。Vue3で推奨される:deep()セレクタを使用してください。

// main.js 例
import App from './App';
import { createSSRApp } from 'vue';

export function initializeApp() {
  const application = createSSRApp(App);
  return {
    application
  };
}

3. ライフサイクル

3.1 アプリケーションライフサイクル (App.vue)

export default {
  // アプリケーション初期化完了時に1回だけ実行
  onLaunch: function() {
    console.log('Application Launched');
  },
  // アプリケーションが表示される時、またはバックグラウンドからフォアグラウンドに戻る時に実行
  onShow: function() {
    console.log('Application Shown');
  },
  // アプリケーションが非表示になる時、またはフォアグラウンドからバックグラウンドに移る時に実行
  onHide: function() {
    console.log('Application Hidden');
  }
};

3.2 ページライフサイクル (pagesディレクトリ)

import { defineComponent } from 'vue';

export default defineComponent({
  // ページ読み込み時
  onLoad() {
    console.log("Page Loaded");
  },
  // ページ初回レンダリング完了時
  onReady() {
    console.log("Page Ready");
  },
  // ページ表示時
  onShow() {
    console.log("Page Shown");
  },
  // ページ非表示時
  onHide() {
    console.log("Page Hidden");
  },
  // ページアンロード時
  onUnload() {
    console.log("Page Unloaded");
  }
});

3.3 コンポーネントライフサイクル (componentsディレクトリ)

Vue3の標準的なコンポーネントライフサイクルフック (setup, onMounted, onUpdated, onUnmounted など) を使用します。

タグ: UniApp Vue3 TypeScript フロントエンド クロスプラットフォーム

6月23日 21:19 投稿