import React, { useEffect, useState } from 'react' import { Header } from '../components/Header' import { Footer } from '../components/Footer' import { Categories } from '../clientsdk/sdk.gen' import { createClient } from '../clientsdk/client' import { customQuerySerializer } from '../clientsdk/querySerializer' import { TENANT_SLUG, TENANT_API_KEY, API_URL } from '../config' const client = createClient({ baseUrl: API_URL, querySerializer: customQuerySerializer, headers: { 'X-Tenant-Slug': TENANT_SLUG, 'X-API-Key': TENANT_API_KEY, }, }) export const CategoriesPage: React.FC = () => { const [categories, setCategories] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { const fetchCategories = async () => { try { setLoading(true) setError(null) const response = await Categories.listCategories({ client, query: { limit: 100, }, }) setCategories((response as any)?.data?.docs || []) } catch (err) { setError(err instanceof Error ? err.message : '加载失败') console.error('获取分类失败:', err) } finally { setLoading(false) } } fetchCategories() }, []) return (

📂 文章分类

浏览所有分类

{error && (
错误: {error}
)}
{loading ? Array.from({ length: 6 }).map((_, i) => (
)) : categories.map((category) => (

{category.title}

查看该分类下的所有文章

))}
{!loading && categories.length === 0 && !error && (

暂无分类

)}
) }