import useSWRImmutable from "swr/immutable"; import commaNumber from "comma-number"; import Loading from "../Loading"; import fetcher from "../../lib/helpers/fetcher"; import type { PageStats } from "../../types"; export type HitCounterProps = { slug: string; }; const HitCounter = ({ slug }: HitCounterProps) => { // use immutable SWR to avoid double (or more) counting views: // https://swr.vercel.app/docs/revalidation#disable-automatic-revalidations const { data, error } = useSWRImmutable( `/api/count/?${new URLSearchParams({ slug, })}`, fetcher ); // fail secretly if (error) { return null; } // show spinning loading indicator if data isn't fetched yet if (!data) { return ; } // we have data! return ( {commaNumber(data.hits)} ); }; export default HitCounter;