Countdown với Reactjs Typescript sử dụng momentjs
- Định nghĩa:
type $Parse = {
months?: string;
days?: string;
hours?: string;
minutes?: string;
seconds?: string;
};
type $Time = {
timeString: string;
diffTimes: number;
stop: boolean;
parse: $Parse;
initTime?: $Parse;
};
type $Props = {
timeThen: Moment;
initTime?: $Parse;
};
- Tạo hook xử lý logic:
'use client';
import moment, { Moment } from 'moment';
import { useState } from 'react';
export function useCountDown({ timeThen, initTime }: $Props) {
const [time, setTime] = useState({} as $Time);
const padTime = (val: any) => {
return val.toString().padStart(2, '0') as string;
};
const onConstrueTime = (timeThen: any) => {
const now = moment();
const then = moment(timeThen);
const diffTimes = then.diff(now);
const remaining = moment.duration(diffTimes);
const months = padTime(remaining.months());
const days = padTime(remaining.days());
const hours = padTime(remaining.hours());
const minutes = padTime(remaining.minutes());
const seconds = padTime(remaining.seconds());
return {
timeString:
`ngày: ${days} - giờ: ${hours} - phút :${minutes} - giây: ${seconds}`.toString(),
diffTimes,
stop: diffTimes < 1,
parse: { months, days, hours, minutes, seconds },
} as const;
};
const onCountdown = () => {
const interval = setInterval(() => {
const result = onConstrueTime(timeThen);
if (result?.stop) {
setTime({ ...result, initTime });
clearInterval(interval);
} else {
setTime({ ...result });
}
}, 1000);
};
return { onCountdown, onConstrueTime, time };
}
- Cách dùng: Tại component gọi trong lifecycirle : ví dụ time then là 30 giây nữa
const { time, onCountdown } = useCountDown({
timeThen: moment().add(30, 'seconds'),
});
useEffect(() => {
onCountdown();
}, []);
type KeyParse = keyof typeof time.parse;
console.log('time :>> ', time);
output time:
{
"timeString": "ngày: 00 - giờ: 00 - phút :00 - giây: 05",
"diffTimes": 5485,
"stop": false,
"parse": {
"months": "00",
"days": "00",
"hours": "00",
"minutes": "00",
"seconds": "05"
}
}
Thích thì mình chỉnh lại xí là được, thấy clean & clear code rồi đúng hông
Phần tiếp theo: Edit JSON
All rights reserved