Snippets & Ideas
A collection of code snippets, inventions, and quick blog-style notes. Useful for reference, learning, or inspiration.
React: Copy to Clipboard Button
A simple button to copy text to the clipboard using the Clipboard API.
function CopyButton({ text }) {
return (
<button onClick={() => navigator.clipboard.writeText(text)}>
Copy
</button>
);
}React: useEventListener Hook (Global & Element)
A custom React hook to attach event listeners to any element or the window, with automatic cleanup and stable callback reference. Works for any event type.
import { useEffect, useRef } from "react";
function useEventListener(event, handler, element = window) {
const savedHandler = useRef();
useEffect(() => { savedHandler.current = handler; }, [handler]);
useEffect(() => {
const target = element && 'current' in element ? element.current : element;
if (!target?.addEventListener) return;
const eventListener = (e) => savedHandler.current(e);
target.addEventListener(event, eventListener);
return () => target.removeEventListener(event, eventListener);
}, [event, element]);
}
// Usage:
// useEventListener('resize', () => console.log(window.innerWidth));
// useEventListener('click', handler, ref);
JavaScript: Deep Object Freeze (Recursive)
Recursively freezes an object and all nested objects/arrays, making it fully immutable. Useful for advanced state management or security.
function deepFreeze(obj) {
Object.getOwnPropertyNames(obj).forEach((prop) => {
if (
obj[prop] !== null &&
(typeof obj[prop] === "object" || typeof obj[prop] === "function") &&
!Object.isFrozen(obj[prop])
) {
deepFreeze(obj[prop]);
}
});
return Object.freeze(obj);
}
// Usage:
// const frozen = deepFreeze({a: {b: [1,2,3]}, c: () => {}});
CSS: Center an Element
Quick way to center any element both vertically and horizontally.
center-me {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}JavaScript: Debounce Function
Debounce limits how often a function can fire. Useful for search inputs, resize events, etc.
function debounce(fn, delay) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}