- useMemo für Redux-Selektoren in Kue705FO.tsx hinzugefügt, um unnötige Re-Renders zu vermeiden.
- State-Update in useAlarmStatus.ts optimiert, sodass setState nur noch aufgerufen wird, wenn sich der Wert wirklich ändert.
- Performance verbessert und maximale Update-Tiefe-Fehler ("Maximum update depth exceeded") behoben.
- Code-Struktur verbessert, um stabilere Redux-Integration zu gewährleisten.
35 lines
963 B
TypeScript
35 lines
963 B
TypeScript
// components/main/kabelueberwachung/kue705FO/hooks/useAlarmStatus.ts
|
|
import { useEffect, useState } from "react";
|
|
|
|
const useAlarmStatus = (
|
|
slotIndex: number,
|
|
kueAlarm1: number[],
|
|
kueAlarm2: number[],
|
|
kueCableBreak: number[],
|
|
kueGroundFault: number[]
|
|
) => {
|
|
const [currentAlarmStatus, setCurrentAlarmStatus] = useState(false);
|
|
|
|
useEffect(() => {
|
|
const calculateAlarmStatus = () => {
|
|
return (
|
|
(kueAlarm1?.[slotIndex] ?? 0) ||
|
|
(kueAlarm2?.[slotIndex] ?? 0) ||
|
|
(kueCableBreak?.[slotIndex] ?? 0) ||
|
|
(kueGroundFault?.[slotIndex] ?? 0)
|
|
);
|
|
};
|
|
|
|
const newStatus = !!calculateAlarmStatus();
|
|
|
|
// 🚀 Nur aktualisieren, wenn sich der Wert wirklich ändert!
|
|
setCurrentAlarmStatus((prevStatus) =>
|
|
prevStatus !== newStatus ? newStatus : prevStatus
|
|
);
|
|
}, [slotIndex, kueAlarm1, kueAlarm2, kueCableBreak, kueGroundFault]);
|
|
|
|
return currentAlarmStatus;
|
|
};
|
|
|
|
export default useAlarmStatus;
|