"use client" import { Skeleton } from "@/components/ui/skeleton"; import { BlogApi } from "@/lib/api"; import { useCallback } from "react" import useSWR from "swr"; import { Alert, AlertDescription, AlertTitle, } from "@/components/ui/alert"; import { AlertCircle } from "lucide-react"; import { base62 } from "@/lib/utils"; export default function Blog() { const formatNumber = useCallback((num: number) => { if (num >= 1000) { return (num / 1000).toFixed(1) + 'K'; } else if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M'; } return num.toString(); }, []); const { data: blogs, error, isLoading } = useSWR( '/api/blogs', () => BlogApi.list(), ) return (
{ isLoading && (
) } { error && ( 出错啦 {error.message} ) } { blogs && blogs.map((blog) => (
{blog.title}

{blog.description}

{new Date(blog.createdAt).toLocaleString()} · {formatNumber(blog.viewCount)} 次访问

)) }
) }