fix bug
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user