refactor: improves Performance & Code Readability

- Replaces useEffet with useMemo & useLayoutEffect where necessary.
- Converts some useEffects to separate hooks.
- Moves the functions defined within components to utils.
- Splits the Keywords renderPosition function to its own component.
This commit is contained in:
towfiqi
2024-01-13 10:10:49 +06:00
parent 2783de5c65
commit 4a47cedad8
18 changed files with 146 additions and 153 deletions

12
hooks/useIsMobile.tsx Normal file
View File

@@ -0,0 +1,12 @@
import { useEffect, useState } from 'react';
const useIsMobile = () => {
const [isMobile, setIsMobile] = useState<boolean>(false);
useEffect(() => {
setIsMobile(!!(window.matchMedia('only screen and (max-width: 760px)').matches));
}, []);
return [isMobile];
};
export default useIsMobile;

17
hooks/useOnKey.tsx Normal file
View File

@@ -0,0 +1,17 @@
import { useEffect } from 'react';
const useOnKey = (key:string, onPress: Function) => {
useEffect(() => {
const closeModalonEsc = (event:KeyboardEvent) => {
if (event.key === key) {
onPress();
}
};
window.addEventListener('keydown', closeModalonEsc, false);
return () => {
window.removeEventListener('keydown', closeModalonEsc, false);
};
}, [key, onPress]);
};
export default useOnKey;

13
hooks/useWindowResize.tsx Normal file
View File

@@ -0,0 +1,13 @@
import { useEffect } from 'react';
const useWindowResize = (onResize: () => void) => {
useEffect(() => {
onResize();
window.addEventListener('resize', onResize);
return () => {
window.removeEventListener('resize', onResize);
};
}, [onResize]);
};
export default useWindowResize;