Vue 3でBootstrap 5を使用する方法
問題点
Vue 3プロジェクトでBootstrap 5を使用したい場合、jQueryに依存しないBootstrap 5を直接使用できるかどうか、そしてその実装方法について理解が必要です。Bootstrap-Vueのような専用ライブラリを使用せずに、Bootstrap 5をVue 3と統合する方法について説明します。
ソリューション
基本インストール
まず、Bootstrapとその依存関係であるPopper.jsをインストールします。
npm install --save bootstrap @popperjs/core
Vueエントリーポイントでのインポート
main.js
またはmain.ts
ファイルでBootstrapのCSSとJavaScriptをインポートします。
import "bootstrap/dist/css/bootstrap.min.css";
import "bootstrap";
基本的な使用方法
BootstrapのCSSクラスを直接使用してコンポーネントを作成できます。
<template>
<div class="container">
<h1 class="text-center my-5">Vue 3とBootstrap 5の統合</h1>
<button type="button" class="btn btn-primary">プライマリーボタン</button>
<div class="dropdown">
<button
class="btn btn-secondary dropdown-toggle"
type="button"
id="dropdownMenuButton1"
data-bs-toggle="dropdown"
aria-expanded="false"
>
ドロップダウン
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
<li><a class="dropdown-item" href="#">アクション</a></li>
<li><a class="dropdown-item" href="#">別のアクション</a></li>
<li><a class="dropdown-item" href="#">その他</a></li>
</ul>
</div>
</div>
</template>
重要な注意点
公式Bootstrapドキュメントでは、React、Vue、AngularなどのJavaScriptフレームワークでは、BootstrapのJavaScript機能が完全に互換性があるわけではないと説明されています。両方が同じDOM要素を変更しようとすると、ドロップダウンが「開いた」状態で固まるなどのバグが発生する可能性があります。
データ属性の変更点
Bootstrap 5では、データ属性に -bs-
接頭辞が追加されました。Bootstrap 4から移行する場合は、データ属性を更新する必要があります。
Bootstrap 4:
<a href="#" data-toggle="collapse" data-target="#collapseExample">
クリックで折りたたみ
</a>
Bootstrap 5:
<a href="#" data-bs-toggle="collapse" data-bs-target="#collapseExample">
クリックで折りたたみ
</a>
Vueコンポーネントとしてのラップ
BootstrapコンポーネントをVueコンポーネントとしてラップする方法:
<template>
<button
class="btn btn-primary"
data-bs-target="#collapseTarget"
data-bs-toggle="collapse">
Bootstrap折りたたみ
</button>
<div class="collapse py-2" id="collapseTarget">
これはトグル可能なコンテンツです!
</div>
</template>
モーダルの実装例
VueでBootstrapモーダルを制御する例:
<template>
<div>
<button type="button" class="btn btn-primary" @click="modalToggle">
モーダルを開く
</button>
<div
ref="modal"
class="modal fade"
:class="{ show: active, 'd-block': active }"
tabindex="-1"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">モーダルタイトル</h5>
<button
type="button"
class="btn-close"
@click="modalToggle"
></button>
</div>
<div class="modal-body">
<p>モーダルの本文です。</p>
</div>
</div>
</div>
</div>
<div v-if="active" class="modal-backdrop fade show"></div>
</div>
</template>
<script>
export default {
data() {
return {
active: false,
}
},
methods: {
modalToggle() {
const body = document.querySelector("body")
this.active = !this.active
this.active ? body.classList.add("modal-open") : body.classList.remove("modal-open")
},
},
}
</script>
プロダクション環境での考慮事項
大規模なアプリケーションでは、BootstrapのJavaScriptとVueのDOM操作が競合する可能性があります。このような場合は、BootstrapVueのVue 3対応版を待つか、または個々のBootstrapコンポーネントをVueコンポーネントとして慎重にラップすることを検討してください。
まとめ
Bootstrap 5はVue 3で直接使用できますが、JavaScriptのインタラクティブなコンポーネントについては注意が必要です。CSSフレームワークとして使用する場合は問題ありませんが、高度なインタラクションが必要な場合は、公式のVue統合ソリューションを検討するか、コンポーネントを適切にラップすることをお勧めします。