'use client'; import Button from "@/components/Button"; import { Letter, SupportedAlphabets } from "@/interfaces"; import { useEffect, useState } from "react"; import MemoryCard from "./MemoryCard"; export default function Home() { const [chosenAlphabet, setChosenAlphabet] = useState(null); const [alphabetData, setAlphabetData] = useState>({ japanese: null, english: null, esperanto: null, uyghur: null }); const [loadingState, setLoadingState] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); useEffect(() => { if (chosenAlphabet && !alphabetData[chosenAlphabet]) { setLoadingState('loading'); fetch('/alphabets/' + chosenAlphabet + '.json') .then(res => { if (!res.ok) throw new Error('Network response was not ok'); return res.json(); }).then((obj) => { setAlphabetData(prev => ({ ...prev, [chosenAlphabet]: obj as Letter[] })); setLoadingState('success'); }).catch(() => { setLoadingState('error'); }); } }, [chosenAlphabet, alphabetData]); useEffect(() => { if (loadingState === 'error') { const timer = setTimeout(() => { setLoadingState('idle'); setChosenAlphabet(null); }, 2000); return () => clearTimeout(timer); } }, [loadingState]); if (!chosenAlphabet) return (
请选择您想学习的字符
); if (loadingState === 'loading') { return '加载中...'; } if (loadingState === 'error') { return '加载失败,请重试'; } if (loadingState === 'success' && alphabetData[chosenAlphabet]) { return ( ); } return null; }