Skip to content

🚀 v2からv3へのアップグレード

🎯 紹介

Vant 3の世界へようこそ!🎉 このドキュメントは、Vant 2からVant 3へのアップグレードの旅をご案内します。プロジェクトにまったく新しいエンジンを搭載するようなもので、より速く、より安定し、より強力に動作するようになります!

🛠️ アップグレード手順

1. 🔄 Vue 3へのアップグレード

まず、プロジェクトにVue 3という強力な新しいエンジンを搭載する必要があります!Vant 3はVue 3のために特別に設計されており、鍵と鍵穴のように完璧にフィットします。Vant 3の素晴らしい旅を始める前に、プロジェクトがVue 3.0以上のバージョンにアップグレードされていることを確認してください。

2. 🔧 非互換アップデートの処理

アップグレードの道のりでは「障害物」に遭遇する可能性がありますが、心配しないでください!詳細な「クリアガイド」を用意しました。以下の非互換アップデートの内容を注意深く読み、ガイドに従って1つずつ処理すれば、すぐにプロジェクトを新鮮な状態にすることができます!

⚠️ 非互換アップデート

🏷️ コンポーネント命名の調整

良い知らせです!より適切な名前をコンポーネントに付けました!GoodsAction 商品ナビゲーションコンポーネントが ActionBar アクションバー ✨ に華麗に変身しました —— 名前がよりシンプルで、機能がより強力になりました!

html
<!-- Vant 2 -->
<van-goods-action>
  <van-goods-action-icon text="アイコン" />
  <van-goods-action-button text="ボタン" />
</van-goods-action>

<!-- Vant 3 -->
<van-action-bar>
  <van-action-bar-icon text="アイコン" />
  <van-action-bar-button text="ボタン" />
</van-action-bar>

🗑️ 廃止コンポーネント

冗長さに別れを告げ、シンプルさを受け入れましょう!SwitchCell コンポーネントを削除しましたが、これは終わりではなく、新しい始まりです!Cell と Switch コンポーネントの完璧な組み合わせを使用して、同じ効果を実現できます。レゴブロックのように柔軟で自由です!🧩

html
<!-- Vant 2 -->
<van-switch-cell title="タイトル" v-model="checked" />

<!-- Vant 3 -->
<van-cell center title="タイトル">
  <template #right-icon>
    <van-switch v-model="checked" size="24" />
  </template>
</van-cell>

🎭 ポップアップ型コンポーネント v-model 変更

Vue 3はまったく新しいv-model APIをもたらし、データバインディングにターボチャージャーを搭載したようなものです!🚗💨 この強力な新機能と完璧に連携するために、私たちのポップアップコンポーネントも優雅にアップグレードされました。以下のポップアップ型コンポーネントの v-model が優雅に v-model:show に変身しました:

  • ActionSheet
  • Calendar
  • Dialog
  • ImagePreview
  • Notify
  • Popover
  • Popup
  • ShareSheet
html
<!-- Vant 2 -->
<van-popup v-model="show" />

<!-- Vant 3 -->
<van-popup v-model:show="show" />

📝 フォーム系コンポーネントの v-model 変更

フォーム系コンポーネントは Vue 3 に合わせて内部仕様を再設計しました。prop は value から modelValue に、イベントは input から update:modelValue に変更されます:

  • Checkbox
  • CheckboxGroup
  • DatetimePicker
  • DropdownItem
  • Field
  • Radio
  • RadioGroup
  • Search
  • Stepper
  • Switch
  • Sidebar
  • Uploader
html
<!-- Vant 2 -->
<van-field :value="value" @input="onInput" />

<!-- Vant 3 -->
<van-field :model-value="value" @update:model-value="onInput" />

🔄 その他の v-model 調整

各コンポーネント固有の調整があります:

  • Circle: v-modelv-model:currentRate 🔄
  • CouponList: v-modelv-model:code 🎫
  • List: v-modelv-model:loadingerror.syncv-model:error 📋
  • Tabs: v-modelv-model:active 📑
  • TreeSelect: active-id.syncv-model:active-id 🌳
  • TreeSelect: main-active-index.syncv-model:main-active-index 🌲

🏷️ バッジ属性名の調整

info 属性は badge へリネームされます。以下のコンポーネントに適用されます:

  • Tab
  • Icon
  • GridItem
  • TreeSelect
  • TabbarItem
  • SidebarItem
  • GoodsActionIcon

内部で使用している Info コンポーネントも Badge にリネームされます。

html
<!-- Vant 2 -->
<van-icon info="5" />

<!-- Vant 3 -->
<van-icon badge="5" />

🚀 get-container のリネーム

Vue 3 の Teleport に合わせ、get-containerteleport に置換されます。

html
<!-- Vant 2 -->
<template>
  <van-popup get-container="body" />
  <van-popup :get-container="getContainer" />
</template>
<script>
  export default {
    methods: {
      getContainer() {
        return document.querySelector('#container');
      },
    },
  };
</script>

<!-- Vant 3 -->
<template>
  <van-popup teleport="body" />
  <van-popup :teleport="container" />
</template>
<script>
  export default {
    beforeCreate() {
      this.container = document.querySelector('#container');
    },
  };
</script>

🔧 API 調整

各コンポーネントの API が整理されています:

🗺️ Area

  • change イベントはインスタンスを渡さず、純粋なデータに集中します

🔘 Button

  • 色の意味付けを明確化:青は infoprimary、緑は primarysuccess
  • native-type のデフォルトを submitbutton に変更

☑️ Checkbox

  • Cell 内で使用する場合は @click.stop を付与してバブリングを抑制

💬 Dialog

  • allow-html をデフォルトで無効化
  • before-close を Promise ベースに刷新

📅 DatetimePicker

  • change は純粋なデータ変更イベントに

🖼️ ImagePreview

  • async-close を廃止し before-close を導入

🎛️ Picker

  • change イベントの引数を簡潔化
  • allow-html をデフォルト無効化
  • show-toolbar をデフォルト有効化
  • カスケード選択は完全なオプションオブジェクトを返却

💭 Popover

  • trigger のデフォルトを click に変更

🔢 Stepper

  • async-changebefore-change

📱 SwipeCell

  • opendetailname に変更
  • on-closebefore-close
  • before-close でインスタンスを渡さない

🍞 Toast

  • maskoverlay

🌳 TreeSelect

  • イベント名の規範化:
    • navclickclick-nav
    • itemclickclick-item

🌍 グローバルメソッドの登録

Vue 3 ではプロトタイプへの直接登録は推奨されません。$toast$dialog などを使用する前に app.use で登録します。

js
import { Toast, Dialog, Notify } from 'vant';

// Toast などを app に登録
app.use(Toast);
app.use(Dialog);
app.use(Notify);

// 子コンポーネントは `$toast` などを利用可能
export default {
  mounted() {
    this.$toast('メッセージ');
  },
};

📚 関連ドキュメント

🔄 移行ガイド

🏗️ 開発ガイド

🧩 コアコンポーネント

🎨 デザインシステム

Vant に基づく企業向けモバイルソリューション