useEffect
runs asynchronously after the render, suitable for side effects like data fetching. useLayoutEffect
runs synchronously after all DOM changes, used for DOM manipulations to avoid flicker.
useEffect(() => {
console.log("Runs after render");
});
useLayoutEffect(() => {
console.log("Runs before paint");
});