๊ด€๋ฆฌ ๋ฉ”๋‰ด

Hi-๋žŒ๐Ÿ‘‹ High-๋žŒโ˜€๏ธ

[React] Datepicker ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ• + ์‹œ๊ฐ„ ์ถ”๊ฐ€ ๋ณธ๋ฌธ

React

[React] Datepicker ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ• + ์‹œ๊ฐ„ ์ถ”๊ฐ€

ํ•˜์ด๋žŒ 2023. 7. 25. 12:36

1. ์„ค์น˜ ๋ฐฉ๋ฒ•

์„ค์น˜ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. react-datepicker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

npm install react-datepicker

 

2. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

import

import DatePicker from "react-datepicker"; // ๊ธฐ๋ณธ ์„ค์ • 1
import "react-datepicker/dist/react-datepicker.css"; // ๊ธฐ๋ณธ ์„ค์ • 2
import { ko } from "date-fns/esm/locale"; // ํ•œ๊ตญ์–ด ์„ค์ •

๋จผ์ € ์›ํ•˜๋Š” ํŒŒ์ผ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ import ํ•œ๋‹ค. ์œ„์˜ ๋‘๊ฐœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์ค€๋‹ค.

๊ธฐ๋ณธ ์–ธ์–ด๋Š” ์˜์–ด๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ตญ์–ด๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์™€ ๊ฐ™์ด import ํ•ด์•ผ ํ•œ๋‹ค.

 

๋ณ€์ˆ˜ ์„ ์–ธ

  const today = new Date();
  const [currentTime, setCurrentTime] = useState(today);

new Date(); ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Date ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ today๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  today๋ฅผ currentTime์˜ ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด ํ˜„์žฌ ์‹œ๊ฐ„์ด Datepicker์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋˜๋„๋ก ํ–ˆ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ

 <StyledDatePicker
    locale={ko} // ํ•œ๊ตญ์–ด ์„ค์ •
    dateFormat="yyyy.MM.dd" // ๋‚ ์งœ ํ˜•์‹ ์ง€์ •
    selected={currentTime} // ์„ ํƒ๋œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ currentTime ๋ณ€์ˆ˜์—์„œ ๊ฐ€์ ธ์˜ด
    onChange={(date) => { // Datepicker์—์„œ ์„ ํƒ๋œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธ
    setCurrentTime(date)
    }}
/>

๋จผ์ € ํ•œ๊ตญ ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋„๋ก locale={ko} ์„ค์ •์„ ํ•ด์ฃผ๊ณ  ๋‚ ์งœ๋ฅผ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ• ์ง€ ์ง€์ •ํ•ด์ค€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  Datepicker์—์„œ ์„ ํƒ๋œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ currentTime ๋ณ€์ˆ˜์—์„œ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค. currentTime์€ ์œ„์—์„œ useState ํ›…์œผ๋กœ ์„ ์–ธ๋œ ์ƒํƒœ ๋ณ€์ˆ˜๋กœ, ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Date ๊ฐ์ฒด๊ฐ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

OnChange๋ฅผ ํ†ตํ•ด Datepicker์—์„œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด ์„ ํƒ๋˜์—ˆ์„ ๋•Œ ์„ ํƒ๋œ ๊ฐ’์„ setCurrentTime์„ ์‚ฌ์šฉํ•˜์—ฌ currentTime ์— ์—…๋ฐ์ดํŠธํ•œ๋‹ค. 

 

์œ„์™€ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“  ๊ฒฐ๊ณผ

 

css ์ ์šฉ

๋‚˜๋Š” DatePicker๋ฅผ styled-components๋ฅผ ์ด์šฉํ•˜์—ฌ customํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.

const StyledDatePicker = styled(DatePicker)`
    width: 170px;
    height: 37px;
    border: none;
    font-weight: 400;
    font-size: 15px;
    line-height: 100%;
    background-color: transparent;
`;

 

3. ์‹œ๊ฐ„ ์ถ”๊ฐ€

์ž…๊ธˆ์ผ'์‹œ'๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„๋„ ์ž…๋ ฅ๋ฐ›๊ณ ์ž ํ–ˆ๋‹ค. ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

<StyledDatePicker
    locale={ko}
    dateFormat="yyyy.MM.dd HH:mm" // ์‹œ๊ฐ„ ํ˜•์‹ ์ถ”๊ฐ€
    selected={currentTime}
    showTimeSelect // ์‹œ๊ฐ„ ์„ ํƒ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”
    timeFormat="HH:mm" // Datepicker์—์„œ ์‹œ๊ฐ„์„ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ• ์ง€ ์ง€์ •
    timeIntervals={1} // ๋ช‡ ๋ถ„ ๋‹จ์œ„๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ง€์ •
    onChange={(date) => {
    setCurrentTime(date)
    }}
/>

๋‹ฌ๋ผ์ง„ ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‹œ๊ฐ„ ์„ ํƒ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•ด showTimeSelect ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์˜€๊ณ , dateFormat์— ์‹œ๊ฐ„ ํ˜•์‹๋„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

๋˜ํ•œ timeFormat์„ ํ†ตํ•ด Datepicker์—์„œ ์‹œ๊ฐ„์„ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ• ์ง€ ์ง€์ •ํ•˜์˜€์œผ๋ฉฐ, ๋ช‡ ๋ถ„ ๋‹จ์œ„๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ timeIntervals={1}์„ ํ†ตํ•ด ์ง€์ •ํ•˜์˜€๋‹ค.

 

4. ๊ฒฐ๊ณผ

์‹œ๊ฐ„ ์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ