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 { useLazyTranslation } from '@/utils/useLazyTranslation'; import { useContextMenuData } from '@/utils/useContextMenuData'; import { cn } from '@/lib/utils'; 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 拦截非必要计算 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 (
{/* 头部区域 */} } iconColor="text-purple-500" /> {/* 文本输入区域 */} {/* 统计结果展示区域 */}
{statItems.map((item) => (
{item.label} {item.value}
))}
); }