refactor: 重构 QrCode 页面为声明式响应架构并统一 shadcn 样式

This commit is contained in:
雨霖铃
2026-05-22 22:32:11 +08:00
parent 89e33f6273
commit 7e58b5688f
7 changed files with 246 additions and 157 deletions
+10 -7
View File
@@ -1,21 +1,23 @@
import type { Dispatch, SetStateAction } from 'react'; // 💡 1. 显式解构导入类型,彻底掐灭 TS2304 报错
import { createContext, useContext } from 'react';
import type { QrCodeMode, QrCodeGeneratorState, QrCodeParserState } from '../types';
import type { QrCodeGeneratorState, QrCodeMode, QrCodeParserState } from '../types';
export interface QrCodeContextValue {
// 模式
// 核心主视图路由模式切换卡
mode: QrCodeMode;
setMode: (mode: QrCodeMode) => void;
// 生成器状态
// 1. 流式生成器终端状态机驱动
generatorState: QrCodeGeneratorState;
setTextToEncode: (text: string) => void;
generateQrCode: (text: string) => Promise<void>;
// 💡 架构纯净化:物理剔除暴露给外部的命令式 generateQrCode 算子。
// 外部面板只需 setTextToEncode 驱动源文本更新,生成动作由内部流式管线全自动自发自愈完成!
downloadQrCode: () => void;
copyQrCode: () => Promise<void>;
// 解析器状态
// 2. 活态反向解析器终端状态机驱动
parserState: QrCodeParserState;
setParserState: React.Dispatch<React.SetStateAction<QrCodeParserState>>;
setParserState: Dispatch<SetStateAction<QrCodeParserState>>; // 💡 规整为纯净的直接类型使用
parseQrCode: (file: File) => Promise<void>;
handleFileChange: (file: File) => void;
handleClearFile: () => void;
@@ -26,7 +28,8 @@ export const QrCodeContext = createContext<QrCodeContextValue | null>(null);
export function useQrCodeContext() {
const context = useContext(QrCodeContext);
if (!context) {
throw new Error('useQrCodeContext must be used within QrCodeProvider');
// 边界鲁棒性防护大闸
throw new Error('useQrCodeContext must be used within a valid QrCodeProvider container');
}
return context;
}