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