import { ArrowLeft, Dot } from 'lucide-react';
import { twMerge } from 'tailwind-merge';
import Link from 'next/link';
interface StepperProps {
label: string;
step: number;
}
export default function Stepper({ label, step }: StepperProps) {
return (
<div className="flex h-8 w-full flex-row items-center justify-between">
<Link href="/">
<ArrowLeft className="m-1 size-6" />
</Link>
<div className="text-BodyMD text-text-normal">{label}</div>
<div className="flex flex-row items-center gap-2">
<Dot
className={`bg-primary size-2.5 rounded-full text-transparent ${
step === 0 &&
'shadow-[0_0_10px_0_rgba(92,255,241,0.70)] outline-1 outline-[#96AAFF]'
}`}
/>
/..../
</div>
</div>
);
}
export default function BudgetPage() {
const [step, setStep]= useState(0)
const fetchUsers = async () => {
const response = await fetch("https://fetchStep");
const data = await response.json();
setStep(data.step);
};
return(
<Stepper label={'Stepper'} step={step} />
)
}
단점 :
import { useState, useEffect } from "react";
export function useDebounce<T>(value: T, delay: number) {
const [debounced, setDebounced] = useState(value);
useEffect(() => {
const timer = setTimeout(() => setDebounced(value), delay);
return () => clearTimeout(timer);
}, [value, delay]);
return debounced;
}
// 사용
const debouncedSearch = useDebounce(searchTerm, 300);
단점 :
Hook Rule