feat: 实现 React 页面层右键菜单数据联动

- 新增 useContextMenuData Hook 处理右键菜单数据传递
- 重构 Jwt/Base64Converter/TextStatistics/QrCode 页面接收右键数据
- RouterProvider 支持从 URL 参数解析右键菜单数据
- 添加 contextMenu/pendingData 存储键到 StorageSchema
- 添加 useContextMenuData 单元测试(12个测试用例)
This commit is contained in:
雨霖铃
2026-05-20 20:51:11 +08:00
parent 471e17eedf
commit 3b98c9438e
8 changed files with 422 additions and 30 deletions
+8 -1
View File
@@ -1,4 +1,4 @@
import { useMemo, useState } from 'react';
import { useCallback, useMemo, useState } from 'react';
import { alpha, Box, Container, Grid, Paper, Typography } from '@mui/material';
import PageHeader from '@/components/PageHeader';
import TextInputArea from '@/components/TextInputArea';
@@ -6,6 +6,7 @@ import DescriptionIcon from '@mui/icons-material/Description';
import { formatByteSize, getTextStats } from '@/utils/textStatistics';
import { textStatisticsPageStyles } from '@/config/pageTheme';
import { useLazyTranslation } from '@/utils/useLazyTranslation';
import { useContextMenuData } from '@/utils/useContextMenuData';
/**
* 文本统计页面组件
@@ -16,6 +17,12 @@ 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]);