React.js ライブラリ「react-nice-dates」を使用してデザイン性の高いカレンダーを制作する

React.js ライブラリ「react-nice-dates」を使用してデザイン性の高いカレンダーを制作する

ライブラリ「react-nice-dates」をインストールすると、デザイン性の高いカレンダーを制作が簡単に可能です。ここでは、react.jsでreact-nice-datesを利用するための手順と簡単な使い方を記述してます。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • node V12.13.1
  • npm 6.14.1
  • React 16.13.0

react.js環境構築

下記のコマンドで構築してます。ここでは、react-appという名前でプロジェクトを作成してます。

create-react-app react-app

react-nice-datesインストール

作成したプロジェクトに移動して、インストールします。

## 作成したプロジェクトに移動
cd react-app
 
## インストール
npm install react-nice-dates

react-nice-dates使い方

srcディレクトリにsample.jsと名前で下記のコードを記述します。

import React, { useState }  from 'react';
import { ja } from 'date-fns/locale'
import { DatePicker } from 'react-nice-dates'
import 'react-nice-dates/build/style.css'

export const Sample = () => {
    const [date, setDate] = useState()

    return (
        <DatePicker date={date} onDateChange={setDate} locale={ja}>
        {({ inputProps, focused }) => (
            <input
            className={'input' + (focused ? ' -focused' : '')}
            {...inputProps}
            />
        )}
        </DatePicker>
    )
}
  
export default Sample

次に、srcディレクトリ配下にあるApp.jsを下記のように編集します。

import React from 'react';
import Sample from './sample';
import './App.css';

function App() {
  const style = {
    width: "50%",
    margin: "0 auto",
    marginTop: 150
  };
  return (
    <div className="App">
      <div style={style}>
        <Sample />
      </div>
    </div>
  );
}

export default App;

実行します。

npm start

ブラウザから http://プライベートIP:3000にアクセスすると、 カレンダー が実装されていることが確認できます。

範囲指定も可能です。sample.jsを下記のコードで編集します。

import React, { useState }  from 'react';
import { ja } from 'date-fns/locale'
import { DateRangePicker, START_DATE, END_DATE } from 'react-nice-dates'
import 'react-nice-dates/build/style.css'

export const Sample = () => {
    const [startDate, setStartDate] = useState()
    const [endDate, setEndDate] = useState()

    return (
        <DateRangePicker
            startDate={startDate}
            endDate={endDate}
            onStartDateChange={setStartDate}
            onEndDateChange={setEndDate}
            minimumDate={new Date()}            
            locale={ja}
            >
            {({ startDateInputProps, endDateInputProps, focus }) => (
                <div className='date-range'>
                <input
                    className={'input' + (focus === START_DATE ? ' -focused' : '')}
                    {...startDateInputProps}
                    placeholder='Start date'
                />
                <span className='date-range_arrow' />
                <input
                    className={'input' + (focus === END_DATE ? ' -focused' : '')}
                    {...endDateInputProps}
                    placeholder='End date'
                />
                </div>
            )}
        </DateRangePicker>
    )
}
  
export default Sample

ブラウザから http://プライベートIP:3000にアクセスすると、 範囲が指定できることが確認できます。