[React] react-datepicker ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ํ๊ธฐ(์บ๋ฆฐ๋, ๋ฌ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ์ ํ ํ๋ก์ ํธ๋ก ํ ํ๋ก์ ํธ๋ฅผ ๊ตฌํ๋ ์น์ฑ์ ํด๋ก ์ฝ๋ฉํ๊ฒ ๋๋ฉด์ ํ๋ก์ ํธ ์งํ ๊ธฐ๊ฐ์ ์ ํํ ์ ์๊ฒ ํ๋ Input์ด ํ์ํ์ต๋๋ค.
๊ทธ๋์ ์บ๋ฆฐ๋๊ฐ ํ์๋๊ณ ์บ๋ฆฐ๋์์ ๋ ์ง๋ฅผ ์ ํํ๋ฉด Input์ ํด๋น ๋ ์ง๊ฐ ์ ๋ ฅ๋ ์ ์๊ฒ ๊ตฌํํ๊ณ ์ถ์์ต๋๋ค.
์บ๋ฆฐ๋๋ฅผ ์ผ์ผ์ด ๊ตฌํํ๊ธฐ์๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฑฐ ๊ฐ์์, ๋ฆฌ์กํธ ์บ๋ฆฐ๋ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ณด๋ ์ค์
react-datepicker๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ง๊ธ๊ป ๊ณต๋ถํ๋ฉด์ ์บ๋ฆฐ๋ ๊ด๋ จํด์๋ ์ฒ์์ด๊ธฐ ๋๋ฌธ์ ์๊ฒ ๋ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค ํฉ๋๋ค.
react-datepicker
react-datepicker๋ ๋ฆฌ์กํธ์์ ๋ฌ๋ ฅ์ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ฌ์ฌ์ฉ์ด ์ฝ๊ฒ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์๊ฒ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค!
npm ์ฌ์ดํธ์ ์ฃผ๊ฐ ๋ค์ด๋ก๋ ํ์๋ฅผ ๋ณด๋ฉด ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
npm
www.npmjs.com/package/react-datepicker
๊ณต์ ๋ฌธ์
์ค์น
์ผ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ํด ์ค์น๋ฅผ ํด์ค๋๋ค.
ํฐ๋ฏธ๋์ ์คํํ๊ณ
npm
npm install react-datepicker --save
yarn
yarn add react-datepicker
์ ๋ ฅํ์ ์ ์ค์นํ ์ ์์ต๋๋ค.
์ค์น๊ฐ ์ ์์ ์ผ๋ก ์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ํ๋ก์ ํธ์ root ํด๋ ๋ด์ package.json์ ์ด๊ณ
"react-datepicker": "^3.8.0"
ํด๋น ๋ด์ฉ์ด ๋ค์ด๊ฐ ์๋ค๋ฉด ์ ์์ ์ผ๋ก ์ค์น๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ฌ์ฉํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ฉ์ด ๋๋์ง npm์ ์์ฑ๋์ด ์๋ ๊ธฐ๋ณธ ์์ ๋ด์ฉ์ ๋ณต์ฌ ๋ถ์ฌ ๋ฃ๊ธฐ ํด์ ์ ์ฉ์์ผ ๋ด ๋๋ค.
import React, { useState } from "react";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
// CSS Modules, react-datepicker-cssmodules.css
// import 'react-datepicker/dist/react-datepicker-cssmodules.css';
const Example = () => {
const [startDate, setStartDate] = useState(new Date());
return (
<DatePicker selected={startDate} onChange={date => setStartDate(date)} />
);
};
์ ์ฉ ํ๋ฉด
์์ฃผ ๊น๋ํ ์บ๋ฆฐ๋์ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค!
๊ทธ๋ฆฌ๊ณ ์ด์ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ์์ ์ ํ๋ฉด ๋๋๋ฐ์.
์ ๋ ํ๋ก์ ํธ์ ์์ ๋ ์ง์ ์ข ๋ฃ ๋ ์ง ์ฆ, 2๊ฐ์ ๋ ์ง๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅ์ด ํ์ํ์ต๋๋ค.
๊ทธ๋์ ์ ๋ ๊ณต์๋ฌธ์์ Date Range ๋ถ๋ถ์ ์ฐธ๊ณ ํด์ ์ ์ฉ์์ผฐ์ต๋๋ค.
์ ๋ ์ด๊ธฐ ๋ ์ง ๊ฐ์ ํ์ฌ ๋ ์ง ๊ฐ์ผ๋ก ํ๊ธฐ ์ํด์ useState์ ์ด๊ธฐ ๊ฐ์ new Date()๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ Type script, styled components ํ๊ฒฝ์์ ์์ ์ค์ ๋๋ค.
๊ธฐ๋ณธ ์ ์ฉ ์ฝ๋
์ ์ฉ ํ๋ฉด
์ด๋ ๊ฒ ์ ์ ์ฉ์ด ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ปค์คํ
์ ๋ ์ฌ๊ธฐ์ ๋ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ถ๋ถ์ด
- ๋ฌ๋ ฅ์ด ํ๊ธ๋ก ํ์๋์ผ๋ฉด ํจ.
- Input์ ํ์๋๋ ๋ด์ฉ์ด '๋ ์ ์ผ'๋ก ํ์๋์ผ๋ฉด ํจ.
- ์์ ๋ ์ง๊ฐ ํ์ฌ ๋ ์ง๋ณด๋ค ์ง๋ ๋ ์ง๋ฅผ ์ ํ ๋ถ๊ฐํ๊ฒ.
- Input ์คํ์ผ ๋ณ๊ฒฝ
์ด๋ ๊ฒ ์ธ ๊ฐ์ง ๋ณ๊ฒฝ์ ์ด ํ์ํ์ต๋๋ค.
react-datepicker์ ์ปค์คํ ์ด ์ ๋ง ์ฝ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋ง์กฑ์ค๋ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค.
๊ณต์๋ฌธ์์๋ ํ์ํ ๋ถ๋ถ๋ค์ด ์ ๋์์์ต๋๋ค.
๋ฌ๋ ฅ ํ๊ธ๋ก ํ์
๋ฌ๋ ฅ์ ์์ผ์ด ํ์ฌ ์์ด๋ก ํ์๋๊ณ ์๋๋ฐ ์ ๋ ํ๊ตญ์ด๋ก ํ์๋์ผ๋ฉด ํ์ต๋๋ค.
๊ทธ๋์ ๊ณต์๋ฌธ์์ Locale ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ฌ ์ฝ๋ ์๋จ์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ธ์ด๋ฅผ import ํด์ฃผ๊ณ ,
import { ko } from 'date-fns/esm/locale';
ํด๋น props๋ฅผ ์ถ๊ฐํด์คฌ์ต๋๋ค.
locale={ko}
Custom date format
๊ธฐ๋ณธ ๋ ์ง ํ์์ ' / ' ๋ก ์ ์ฉ๋์ด์๋๋ฐ, ์ ๋ '๋ ์ ์ผ' ํ์์ ์ ์ฉํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฌธ์์ Custom date format ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ต๋๋ค.
๊ทธ๋์ ์ ๋ dateFormat ๋ถ๋ถ์ ์๋์ ๊ฐ์ด props๋ก ์ ์ฉํด ์ฃผ์์ต๋๋ค.
dateFormat="yyyy๋
MM์ dd์ผ"
ํ์ฌ ๋ ์ง์ ์ ๋ ์ง ์ ํ ๋ถ๊ฐํ๊ฒ ํ๊ธฐ
ํ๋ก์ ํธ์ ์์ ๋ ์ง๋ฅผ ํ์ฌ ๋ ์ง๋ณด๋ค ์ ์ ๋ ์ง๋ก ์ ํ์ ๋ชปํ๊ฒ ํ๊ณ ์ถ์์ต๋๋ค.
์ต์ ๋ ์ง๋ฅผ ์ ์ฉํ ์ ์๋ ๊ณต์๋ฌธ์์ Min Date ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ต๋๋ค.
๊ทธ๋์ ํ๋ก์ ํธ ์์ ๊ธฐ๊ฐ์ minDate ๋ถ๋ถ์ ํ์ฌ ๋ ์ง์ ๊ฐ์ ์ ์ฉ์์ผ ์ฃผ์์ต๋๋ค.
minDate={new Date()}
Input ์คํ์ผ ๋ณ๊ฒฝ
ํ์ฌ Input ์คํ์ผ์ด ์๋ฌด๊ฒ๋ ์ ์ฉ์ด ์๋์ด์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์คํ์ผ๋ง์ ํด์ค ํ์๊ฐ ์์์ต๋๋ค.
์ ๋ ํ์ฌ styled-components๋ฅผ ์ฌ์ฉ ์ค์ด์๊ธฐ ๋๋ฌธ์ styled-components๋ก ์ปค์คํ ์ ํด์ฃผ์์ต๋๋ค.
์ต์ข ๊ฒฐ๊ณผ
์ ๊ฐ ๊ตฌํํ๊ณ ์ถ์๋ ์บ๋ฆฐ๋+ ์ปค์คํ ๋ค ๋ชจ๋ ์ ์ฉ์ด ์ ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
๋ฆฌ์กํธ์์ ์บ๋ฆฐ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ react-datepicker ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ดค์ต๋๋ค.
๊ณต์๋ฌธ์์ ์ ๋ฆฌ๊ฐ ์ ๋์ด์๊ธฐ ๋๋ฌธ์ ๋งํ๋ ๋ถ๋ถ ์์ด ์ํ๋ ๊ฒ์ ์ ๊ตฌํํด๋ผ ์ ์์์ต๋๋ค.
์ ๊ฐ ์ ์ฉํ ๊ฒ ์ธ์ ์ฌ๋ฌ ์ต์ ๋ค๋ ์ปค์คํ ํ ์ ์๋๋ก ๊ณต์๋ฌธ์์ ์ ๋ฆฌ๊ฐ ์ ๋์ด์๋๋ฐ ํ์ํ ๋ถ๋ถ์ ์ฐพ์์ ์ ๊ฐ๋ค ์ฐ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.