48日目
9567 ワード
カレンダーを書くのでreact-datepickerライブラリを使いました.
でも説明とサンプルソースは親切ではありません😥
demoバージョンをそのまま使うとエラーがひどくなります
react-datepicker : www.npmjs.com/package/react-datepicker
react-datepicker demo : reactdatepicker.com/#example-custom-header
lodash : www.npmjs.com/package/lodash
yarn add react-datepicker
しかし、基本的な方法ではなく、必要に応じてCustomを使いたいと思います.
1.韓国語を使う(Janary->1月)
2.年と月をselectに変更
このため、datepickerはヘッダをprops値に渡し、カスタムオプションを提供します.
Header Customソースの直接インポート
この部分を持ってきて、直接貼って、
エラーは次のとおりです.😣
「range」is notdefined:range関数は存在しません(エラーを表すのは当然です)
「getYear」が定義されていません:ライブラリの追加
「getMonth」が定義されていません:ライブラリの追加
この問題を解決するには、別のディスク・ライブラリをインストールします.
range関数を直接実現しようとしたが、正常に動作しなかった.
だからロダッシュの助けを得た😥
:range(開始年、最終年).
私の望み通り、すべて順調です.😏
プレゼンテーションサイトには複数の例が含まれているため、よりカスタマイズが必要です.
少し修正して使えばいいです
でも説明とサンプルソースは親切ではありません😥
demoバージョンをそのまま使うとエラーがひどくなります
react-datepicker : www.npmjs.com/package/react-datepicker
react-datepicker demo : reactdatepicker.com/#example-custom-header
lodash : www.npmjs.com/package/lodash
1.ライブラリのインストール
yarn add react-datepicker
2.デフォルトdatepicker構成部品を作成して適用します。jsのインポート
// Calendar.js
import React, { useState } from "react";
import DatePicker from "react-datepicker";
const Calendar = () => {
const [startDate, setStartDate] = useState(new Date());
return (
<DatePicker selected={startDate} onChange={date => setStartDate(date)} />
);
};
export default Calendar
import "react-datepicker/dist/react-datepicker.css"; // css import
import Calendar from './Calendar'
function App() {
return (
<div className="App">
<Calendar />
</div>
);
}
export default App;
react-datepicker 기본
動作がすばらしいしかし、基本的な方法ではなく、必要に応じてCustomを使いたいと思います.
1.韓国語を使う(Janary->1月)
2.年と月をselectに変更
このため、datepickerはヘッダをprops値に渡し、カスタムオプションを提供します.
Header Customソースの直接インポート
この部分を持ってきて、直接貼って、
エラーは次のとおりです.😣
「range」is notdefined:range関数は存在しません(エラーを表すのは当然です)
「getYear」が定義されていません:ライブラリの追加
「getMonth」が定義されていません:ライブラリの追加
3.追加コピーの追加
range関数を直接実現しようとしたが、正常に動作しなかった.
だからロダッシュの助けを得た😥
yarn add date-fns --save // getYear, getMonth
yarn add react-lodash // range 사용
4.ソースの変更
import React, { useState } from "react";
import { getYear, getMonth } from "date-fns"; // getYear, getMonth
import DatePicker, { registerLocale } from "react-datepicker"; // 한국어적용
import ko from 'date-fns/locale/ko'; // 한국어적용
registerLocale("ko", ko) // 한국어적용
const _ = require('lodash');
4-1. range()エラー処理
:range(開始年、最終年).
const years = _.range(1990, getYear(new Date()) + 1, 1); // 수정
4-2. データ言語の適用
{...}
const months = ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'];
<DatePicker
{ ... }
locale={ko} // 추가
/>
{...}
4-3. データフォーマット(0000/00/00->0000-00-00)
<DatePicker
{ ... }
dateFormat="yyyy-MM-dd" // 추가
/>
私の望み通り、すべて順調です.😏
プレゼンテーションサイトには複数の例が含まれているため、よりカスタマイズが必要です.
少し修正して使えばいいです
*最終ソース
import React, { useState } from "react";
import { getYear, getMonth } from "date-fns"; // getYear, getMonth
import DatePicker, { registerLocale } from "react-datepicker"; // 한국어적용
import ko from 'date-fns/locale/ko'; // 한국어적용
registerLocale("ko", ko) // 한국어적용
const _ = require('lodash');
const Calendar = () => {
const [startDate, setStartDate] = useState(new Date());
const years = _.range(1990, getYear(new Date()) + 1, 1); // 수정
const months = ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'];
return (
<DatePicker
renderCustomHeader={({
date,
changeYear,
changeMonth,
decreaseMonth,
increaseMonth,
prevMonthButtonDisabled,
nextMonthButtonDisabled
}) => (
<div
style={{
margin: 10,
display: "flex",
justifyContent: "center"
}}
>
<button onClick={decreaseMonth} disabled={prevMonthButtonDisabled}>
{"<"}
</button>
<select
value={getYear(date)}
onChange={({ target: { value } }) => changeYear(value)}
>
{years.map(option => (
<option key={option} value={option}>
{option}
</option>
))}
</select>
<select
value={months[getMonth(date)]}
onChange={({ target: { value } }) =>
changeMonth(months.indexOf(value))
}
>
{months.map(option => (
<option key={option} value={option}>
{option}
</option>
))}
</select>
<button onClick={increaseMonth} disabled={nextMonthButtonDisabled}>
{">"}
</button>
</div>
)}
selected={startDate}
dateFormat={"yyyy-MM-dd"}
locale={ko}
onChange={date => setStartDate(date)}
/>
);
};
export default Calendar
では今日も楽しくコーディングします.🥰Reference
この問題について(48日目), 我々は、より多くの情報をここで見つけました https://velog.io/@minkuk90/48일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol