feat:shareConnect拆分|处理effect竞争引发的Bug

This commit is contained in:
MatrixSeven
2025-08-28 15:31:21 +08:00
parent 63e6e956e4
commit bc01224c11
17 changed files with 1878 additions and 417 deletions

View File

@@ -42,6 +42,7 @@ interface WebRTCFileReceiveProps {
downloadedFiles?: Map<string, File>;
error?: string | null;
onReset?: () => void;
pickupCode?: string;
}
export function WebRTCFileReceive({
@@ -53,12 +54,16 @@ export function WebRTCFileReceive({
isWebSocketConnected = false,
downloadedFiles,
error = null,
onReset
onReset,
pickupCode: propPickupCode
}: WebRTCFileReceiveProps) {
const [pickupCode, setPickupCode] = useState('');
const [isValidating, setIsValidating] = useState(false);
const { showToast } = useToast();
// 使用传入的取件码或本地状态的取件码
const displayPickupCode = propPickupCode || pickupCode;
// 验证取件码是否存在
const validatePickupCode = async (code: string): Promise<boolean> => {
try {
@@ -141,13 +146,13 @@ export function WebRTCFileReceive({
</div>
<div>
<h3 className="text-lg font-semibold text-slate-800"></h3>
<p className="text-sm text-slate-600">: {pickupCode}</p>
<p className="text-sm text-slate-600">: {displayPickupCode}</p>
</div>
</div>
<div className="flex items-center space-x-4">
<ConnectionStatus
currentRoom={pickupCode ? { code: pickupCode, role: 'receiver' } : null}
currentRoom={displayPickupCode ? { code: displayPickupCode, role: 'receiver' } : null}
/>
<Button
@@ -202,14 +207,14 @@ export function WebRTCFileReceive({
</div>
<div>
<h3 className="text-lg font-semibold text-slate-800"></h3>
<p className="text-sm text-slate-600">: {pickupCode}</p>
<p className="text-sm text-slate-600">: {displayPickupCode}</p>
</div>
</div>
{/* 连接状态 */}
<ConnectionStatus
currentRoom={{ code: pickupCode, role: 'receiver' }}
currentRoom={{ code: displayPickupCode, role: 'receiver' }}
/>
</div>