import { useCallback, useMemo, useState } from 'react'; import { FileText } from 'lucide-react'; import PageHeader from '@/components/PageHeader'; import TextInputArea from '@/components/TextInputArea'; import { formatByteSize, getTextStats } from '@/utils/textStatistics'; import { textStatisticsPageStyles } from '@/config/pageTheme'; import { useLazyTranslation } from '@/utils/useLazyTranslation'; import { useContextMenuData } from '@/utils/useContextMenuData'; /** * 文本统计页面组件 * * 提供实时的文本分析功能,包括字符数、单词数、行数和字节大小。 */ export default function Index() { const { t } = useLazyTranslation('textStatistics'); const [text, setText] = useState(''); const handleContextMenuData = useCallback((payload: string) => { setText(payload); }, []); useContextMenuData({ featureKey: 'textStatistics', onData: handleContextMenuData }); // 实时计算统计信息,使用 useMemo 优化性能 // 对于 10,000 字符以上的文本,Intl.Segmenter 也能保持良好的性能 const stats = useMemo(() => getTextStats(text), [text]); const statItems = [ { label: t('textStatistics:characters'), value: stats.characters }, { label: t('textStatistics:words'), value: stats.words }, { label: t('textStatistics:lines'), value: stats.lines }, { label: t('textStatistics:bytes'), value: formatByteSize(stats.bytes) }, ]; return (