本文档记录了将项目中的原生 alert() 和 confirm() 替换为自定义通知系统的实现过程。
2026-01-31
frontend/
├── components/
│ ├── Toast.tsx # Toast 通知组件(已存在)
│ ├── ConfirmDialog.tsx # 确认对话框组件(新建)
│ └── NotificationExample.tsx # 使用示例(新建)
├── contexts/
│ └── NotificationContext.tsx # 通知系统 Context 和 Hooks(新建)
├── App.tsx # 添加 NotificationProvider
└── utils/
└── migrationGuide.md # 迁移指南(新建)
confirm()useToast 和 useConfirm hooksconst { showToast } = useToast();
showToast('操作成功', 'success');
showToast('操作失败', 'error');
const { showConfirm } = useConfirm();
const confirmed = await showConfirm({
title: '确认删除',
message: '确定要删除这条记录吗?',
confirmText: '删除',
cancelText: '取消',
danger: true
});
alert() 为 showToast()alert() 为 showToast()confirm() 为 showConfirm()confirm() 为 showConfirm()frontend/components/audio/SynthesisPanel.tsx - 3 处 alert, 1 处 confirmfrontend/components/audio/LongTextPanel.tsx - 2 处 alertfrontend/pages/ImageTranslation.tsx - 2 处 alert, 2 处 confirmfrontend/pages/DataMining.tsx - 9 处 alert, 4 处 confirmfrontend/pages/InvoiceManagement.tsx - 5 处 alertfrontend/pages/InvoiceApply.tsx - 3 处 alertfrontend/pages/Billing.tsx - 2 处 alertfrontend/pages/DeepResearch.tsx - 1 处 confirmfrontend/pages/ResearchHistory.tsx - 1 处 confirmfrontend/components/ocr/ImageUploadZone.tsx - 3 处 alertfrontend/components/HistoryTable.examples.tsx - 1 处 confirm导入 Hooks
import { useToast } from '../contexts/NotificationContext';
import { useConfirm } from '../contexts/NotificationContext';
在组件中使用
const MyComponent = () => {
const { showToast } = useToast();
const { showConfirm } = useConfirm();
const handleSave = async () => {
try {
await saveData();
showToast('保存成功', 'success');
} catch (error) {
showToast('保存失败', 'error');
}
};
const handleDelete = async () => {
const confirmed = await showConfirm({
title: '确认删除',
message: '确定要删除吗?',
danger: true
});
if (confirmed) {
await deleteData();
showToast('删除成功', 'success');
}
};
};
// 旧代码
alert('操作成功');
// 新代码
showToast('操作成功', 'success');
// 旧代码
if (!confirm('确定删除吗?')) return;
// 新代码
const confirmed = await showConfirm({
message: '确定删除吗?',
danger: true
});
if (!confirmed) return;
更好的用户体验
更灵活的配置
更好的可维护性
更好的可访问性
duration 参数自定义支持多个 Toast 同时显示
支持更多通知类型
支持自定义位置
支持键盘快捷键
支持自定义动画
功能测试
边界测试
可访问性测试