This commit is contained in:
gorbenko.pavel
2026-08-07 12:51:52 +05:00
parent 3f7e42e874
commit 359f92afda
@@ -192,11 +192,21 @@ export const ManageRequestsScreen: React.FC<IManageRequestsScreenProps> = ({ api
// title/status в комбобоксе (а значит, и в localStorage) держим
// синхронными с сервером — особенно важно после захода по глубокой
// ссылке, где изначально они пустые (см. эффект-затравку выше).
setSelection(prev =>
prev.selectedRequest && prev.selectedRequest.id === m.request.id
? { ...prev, selectedRequest: m.request }
: prev
);
//
// ВАЖНО: возвращаем ТОТ ЖЕ prev (без изменений), если title/status не
// отличаются — m.request это каждый раз НОВЫЙ объект (свежий парсинг
// ответа), и если писать его в состояние безусловно, selectedRequest
// получает новую ссылку на КАЖДОЙ загрузке, даже когда содержимое не
// поменялось. Это меняет зависимости reloadMatrix → пересоздаёт саму
// функцию → мониторящий её useEffect срабатывает заново → снова
// reloadMatrix() → снова новая ссылка — бесконечный цикл перезагрузки
// (именно так выглядела «неадекватно долгая загрузка»).
setSelection(prev => {
const sel = prev.selectedRequest;
if (!sel || sel.id !== m.request.id) return prev;
const same = sel.title === m.request.title && sel.status === m.request.status;
return same ? prev : { ...prev, selectedRequest: m.request };
});
})
.catch((e: Error) => setMatrixError(e.message))
.finally(() => {