Skip to content

๐Ÿง [React] react-moment, moment.js ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ๊ฐ„ย #33

@leemember

Description

@leemember

moment.js

  • ์‹œ๊ฐ„์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์กฐ์ž‘ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํŽธ๋ฆฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ ๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋ผ๋ฉด ์‚ฌ์šฉํ•ด๋ณผ๋งŒ ํ•˜๋‹ค.
  • moment์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์„ค๋ช…๋ฒ•์€ ๋งจ ์•„๋ž˜์— ๊ธฐ์žฌ ์˜ˆ์ •

์„ค์น˜

$npm i moment

์„ ์–ธ

import moment from 'moment';
import 'moment/locale/ko';

ํ˜„์žฌ ์‹œ๊ฐ„

const nowTime = moment().format('YYYY-MM-DD HH:mm:ss');
console.log('ํ˜„์žฌ ์‹œ๊ฐ„', nowTime);

์ด ์ƒํƒœ๋ผ๋ฉด F5 ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ๋งŒ ์‹œ๊ฐ„์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

setInterval ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ํ•˜๊ธฐ

  • ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ์‹œํ‚ฌ ๋•Œ๋Š” setInterval์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • ๋‹ค๋งŒ, ๋ฆฌ์•กํŠธ ํ›…์—์„œ setInterval์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ฐธ๊ณ  https://overreacted.io/making-setinterval-declarative-with-react-hooks/

๊ฐ„๋žต ์„ค๋ช…ํ•˜๋ฉด, ๋‹ค์†Œ ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค.

  useInterval(() => {
    // Your custom logic here
    setCount(count + 1);
  }, 1000);

์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋” ์ถ”์ฒœํ•œ๋‹ค. ์™œ๋ƒ๋ฉด, ์ด๊ฒƒ๊ณผ setInterval์˜ ์ฐจ์ด์ ์€ ์ธ์ˆ˜๊ฐ€ '๋™์ '์ด๋‹ค.

  • ์•„๋ฌดํŠผ ์ด๋Ÿฐ ๋ณตํ•ฉ์ ์ธ ์ด์œ ์™€ ์„ฑ๋Šฅ์ƒ์˜ ์ด์Šˆ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ hook์„ ์ƒ์„ฑํ•˜์—ฌ setInterval์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๊ฐ€ ์žˆ๋‹ค.

์ปค์Šคํ…€ use Hooks setInterval

// useInterval.js ์ž‘์„ฑ
import { useRef, useEffect } from "react";

export default function useInterval(callback, delay) {
    const savedCallback = useRef();

    useEffect(() => {
      // useEffect์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ์ฝœ๋ฐฑ์„ ํ˜„์žฌ Ref๋กœ ์„ ์–ธํ•ด์ค€๋‹ค.
      savedCallback.current = callback;
    });

    useEffect(() => {
      function tick() {
        savedCallback.current();
      }
        // useEffect์— Ref์˜ current๋ฅผ setInterval๋ฅผ delay ์‹œ๊ฐ„๋™์•ˆ ํ•ด์ค€๋‹ค.
      let id = setInterval(tick, delay);
      // ์–ธ๋งˆ์šดํŠธ๋˜๊ธฐ์ „ clearInterval์„ ํ•ด์ค€๋‹ค.
      return () => clearInterval(id);
    }, [delay]);
  }

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, react-use์˜ useInterval ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ“import { useInterval } from 'react-use';

const LiveTimeContainer = () => {
  const [realTime, setRealTime] = useState(Date.now());

  // useInterval
  ๐Ÿ“useInterval(() => {
    setRealTime(Date.now());
  }, 1000);

  return <div>{seconds}</div>
}

์ฐธ๊ณ  https://haranglog.tistory.com/10

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions