From 9f3984717204ec7af94485cfed0eb6f8cd64fb88 Mon Sep 17 00:00:00 2001 From: AI Assistant Date: Wed, 29 Oct 2025 14:09:20 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BD=D0=B0=D0=B7=D0=B0=D0=B4=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20useCallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обернул nextStep, prevStep, updateFormData, handleSubmit в useCallback - Теперь функции стабильны и не пересоздаются при ререндере - nextStep и prevStep используют functional update для setState - Добавлено логирование навигации: '⏩ nextStep' и '⏪ prevStep' - Исправлены зависимости useMemo для steps ПРОБЛЕМА: prevStep вызывался, но setCurrentStep не обновлял стейт РЕШЕНИЕ: useCallback гарантирует что функции стабильны --- frontend/src/pages/ClaimForm.tsx | 34 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/ClaimForm.tsx b/frontend/src/pages/ClaimForm.tsx index 3325b40..3aaaae2 100644 --- a/frontend/src/pages/ClaimForm.tsx +++ b/frontend/src/pages/ClaimForm.tsx @@ -1,4 +1,4 @@ -import { useState, useMemo } from 'react'; +import { useState, useMemo, useCallback } from 'react'; import { Steps, Card, message, Row, Col } from 'antd'; import Step1Policy from '../components/form/Step1Policy'; import Step2EventType from '../components/form/Step2EventType'; @@ -92,19 +92,27 @@ export default function ClaimForm() { }); }); - const updateFormData = (data: Partial) => { - setFormData({ ...formData, ...data }); - }; + const updateFormData = useCallback((data: Partial) => { + setFormData((prev) => ({ ...prev, ...data })); + }, []); - const nextStep = () => { - setCurrentStep(currentStep + 1); - }; + const nextStep = useCallback(() => { + console.log('⏩ nextStep called'); + setCurrentStep((prev) => { + console.log('📍 Current step:', prev, '→ Next:', prev + 1); + return prev + 1; + }); + }, []); - const prevStep = () => { - setCurrentStep(currentStep - 1); - }; + const prevStep = useCallback(() => { + console.log('⏪ prevStep called'); + setCurrentStep((prev) => { + console.log('📍 Current step:', prev, '→ Prev:', prev - 1); + return prev - 1; + }); + }, []); - const handleSubmit = async () => { + const handleSubmit = useCallback(async () => { try { addDebugEvent('form', 'info', '📤 Отправка заявки на сервер'); @@ -151,7 +159,7 @@ export default function ClaimForm() { addDebugEvent('form', 'error', '❌ Ошибка соединения'); console.error(error); } - }; + }, [formData, claimId, sessionId, addDebugEvent]); // Динамически генерируем шаги на основе выбранного eventType const steps = useMemo(() => { @@ -226,7 +234,7 @@ export default function ClaimForm() { }); return stepsArray; - }, [formData, documentConfigs, isPhoneVerified]); + }, [formData, documentConfigs, isPhoneVerified, claimId, sessionId, nextStep, prevStep, updateFormData, handleSubmit, setIsPhoneVerified, addDebugEvent]); const handleReset = () => { setFormData({