fix: Endlosschleife in useAlarmStatus.ts behoben & Redux-Selektoren optimiert
- 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.
This commit is contained in:
@@ -3,27 +3,29 @@ import { useEffect, useState } from "react";
|
||||
|
||||
const useAlarmStatus = (
|
||||
slotIndex: number,
|
||||
kueAlarm1: any,
|
||||
kueAlarm2: any,
|
||||
kueCableBreak: any,
|
||||
kueGroundFault: any
|
||||
kueAlarm1: number[],
|
||||
kueAlarm2: number[],
|
||||
kueCableBreak: number[],
|
||||
kueGroundFault: number[]
|
||||
) => {
|
||||
const [currentAlarmStatus, setCurrentAlarmStatus] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const updateAlarmStatus = () => {
|
||||
const alarmStatus =
|
||||
(kueAlarm1 && Number(kueAlarm1[slotIndex])) ||
|
||||
(kueAlarm2 && Number(kueAlarm2[slotIndex])) ||
|
||||
(kueCableBreak && Number(kueCableBreak[slotIndex])) ||
|
||||
(kueGroundFault && Number(kueGroundFault[slotIndex]));
|
||||
|
||||
setCurrentAlarmStatus(!!alarmStatus);
|
||||
const calculateAlarmStatus = () => {
|
||||
return (
|
||||
(kueAlarm1?.[slotIndex] ?? 0) ||
|
||||
(kueAlarm2?.[slotIndex] ?? 0) ||
|
||||
(kueCableBreak?.[slotIndex] ?? 0) ||
|
||||
(kueGroundFault?.[slotIndex] ?? 0)
|
||||
);
|
||||
};
|
||||
|
||||
updateAlarmStatus();
|
||||
const interval = setInterval(updateAlarmStatus, 10000);
|
||||
return () => clearInterval(interval);
|
||||
const newStatus = !!calculateAlarmStatus();
|
||||
|
||||
// 🚀 Nur aktualisieren, wenn sich der Wert wirklich ändert!
|
||||
setCurrentAlarmStatus((prevStatus) =>
|
||||
prevStatus !== newStatus ? newStatus : prevStatus
|
||||
);
|
||||
}, [slotIndex, kueAlarm1, kueAlarm2, kueCableBreak, kueGroundFault]);
|
||||
|
||||
return currentAlarmStatus;
|
||||
|
||||
Reference in New Issue
Block a user