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) держим // title/status в комбобоксе (а значит, и в localStorage) держим
// синхронными с сервером — особенно важно после захода по глубокой // синхронными с сервером — особенно важно после захода по глубокой
// ссылке, где изначально они пустые (см. эффект-затравку выше). // ссылке, где изначально они пустые (см. эффект-затравку выше).
setSelection(prev => //
prev.selectedRequest && prev.selectedRequest.id === m.request.id // ВАЖНО: возвращаем ТОТ ЖЕ prev (без изменений), если title/status не
? { ...prev, selectedRequest: m.request } // отличаются — m.request это каждый раз НОВЫЙ объект (свежий парсинг
: prev // ответа), и если писать его в состояние безусловно, 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)) .catch((e: Error) => setMatrixError(e.message))
.finally(() => { .finally(() => {