mirror of
https://github.com/AeThex-Corporation/AeThex-OS.git
synced 2026-04-18 14:27:20 +00:00
fix: Memory leak in battery API event listeners
The battery level and charging event listeners were added but never cleaned up when the component unmounts. This caused memory leaks as anonymous functions couldn't be removed. Fix: - Store handler references in variables - Properly cleanup event listeners in useEffect return function - Prevents memory leaks on component unmount/remount cycles
This commit is contained in:
parent
776bd2c6d9
commit
879abba10b
1 changed files with 22 additions and 5 deletions
|
|
@ -230,17 +230,34 @@ export default function AeThexOS() {
|
|||
const [batteryInfo, setBatteryInfo] = useState<{ level: number; charging: boolean } | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
let battery: any = null;
|
||||
let levelChangeHandler: (() => void) | null = null;
|
||||
let chargingChangeHandler: (() => void) | null = null;
|
||||
|
||||
if ('getBattery' in navigator) {
|
||||
(navigator as any).getBattery().then((battery: any) => {
|
||||
(navigator as any).getBattery().then((bat: any) => {
|
||||
battery = bat;
|
||||
setBatteryInfo({ level: Math.round(battery.level * 100), charging: battery.charging });
|
||||
battery.addEventListener('levelchange', () => {
|
||||
|
||||
levelChangeHandler = () => {
|
||||
setBatteryInfo(prev => prev ? { ...prev, level: Math.round(battery.level * 100) } : null);
|
||||
});
|
||||
battery.addEventListener('chargingchange', () => {
|
||||
};
|
||||
chargingChangeHandler = () => {
|
||||
setBatteryInfo(prev => prev ? { ...prev, charging: battery.charging } : null);
|
||||
});
|
||||
};
|
||||
|
||||
battery.addEventListener('levelchange', levelChangeHandler);
|
||||
battery.addEventListener('chargingchange', chargingChangeHandler);
|
||||
});
|
||||
}
|
||||
|
||||
// Cleanup: remove battery event listeners to prevent memory leak
|
||||
return () => {
|
||||
if (battery) {
|
||||
if (levelChangeHandler) battery.removeEventListener('levelchange', levelChangeHandler);
|
||||
if (chargingChangeHandler) battery.removeEventListener('chargingchange', chargingChangeHandler);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
const { data: weatherData, isFetching: weatherFetching } = useQuery({
|
||||
|
|
|
|||
Loading…
Reference in a new issue