ReactとFullCalendarの組み合わせによって、高度なカレンダー機能を持ったアプリケーションを構築することが可能です。この記事では、特にカレンダー外部のエレメントをドラッグして、カレンダー内にドロップする方法を解説します。
はじめに
FullCalendarはJavaScriptで書かれた高機能なカレンダーライブラリです。Reactとの連携もサポートされており、これによりReactのステートやプロップスとFullCalendarの機能をシームレスに連携させることができます。
必要なツールとライブラリ
ライブラリのインストール
まず、Reactがインストールされていることを前提に、必要なライブラリをインストールします。
npm install @fullcalendar/react @fullcalendar/daygrid @fullcalendar/interaction
@fullcalendar/react
: Reactとの統合をサポートするパッケージ@fullcalendar/daygrid
: 月表示のビューを提供するパッケージ@fullcalendar/interaction
: ドラッグ&ドロップやイベントの編集をサポートするパッケージ
コンポーネントの作成
Reactのコンポーネントを以下のように作成します。
import React, { useEffect } from 'react';
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin, { Draggable } from '@fullcalendar/interaction';
function CalendarApp() {
useEffect(() => {
initializeDraggable();
}, []);
const initializeDraggable = () => {
let draggableEls = document.querySelectorAll('.draggable');
draggableEls.forEach(el => {
new Draggable(el, {
eventData: {
title: '作成されるイベントのタイトル'
}
});
});
};
return (
<div className="container">
<div className="draggable">
<p>ドラッグする要素</p>
</div>
<FullCalendar
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
droppable={true}
events={[]}
editable={true}
/>
</div>
);
}
export default CalendarApp;
コンポーネントの解説
- useEffectフック:
- コンポーネントのマウント時に
initializeDraggable
関数を実行します。
- コンポーネントのマウント時に
- initializeDraggable関数:
.draggable
クラスを持つすべての要素をドラッグ可能にします。new Draggable(el, {...})
: 選択された要素に対して、Draggable
クラスのインスタンスを作成します。これにより、要素がドラッグ可能となります。eventData
プロパティによって、ドロップ時にカレンダー上に表示されるイベントのデータを設定します。
- FullCalendarのプロパティ:
plugins
: FullCalendarに統合するためのプラグインの配列です。この例では、dayGridPlugin
とinteractionPlugin
を使用しています。initialView
: FullCalendarが最初に表示するビューのタイプを設定します。この例では月表示(dayGridMonth
)が指定されています。droppable
: このプロパティをtrue
に設定することで、ユーザーが外部要素をカレンダーにドロップできるようになります。events
: カレンダーに初期で表示するイベントの配列です。この例では空の配列が指定されており、初期の段階でイベントは表示されません。editable
: このプロパティをtrue
に設定することで、カレンダー上のイベントをドラッグして移動したり、リサイズすることができます。
まとめ
ReactとFullCalendarを駆使することで、外部のアイテムをカレンダーにドラッグ&ドロップする機能を簡単に実装することができます。実際に自分で実装してみると色々と躓くことろがあったため、今回の記事にまとめてみました。