Snippet Vault
A small, hand-picked set of snippets I reach for often.
Debounce a function
JavaScript · jsfunction debounce(fn, delay = 300) {
let t;
return (...args) => {
clearTimeout(t);
t = setTimeout(() => fn(...args), delay);
};
}useDebouncedValue hook
React · jsximport { useEffect, useState } from 'react';
export function useDebouncedValue(value, delay = 300) {
const [debounced, setDebounced] = useState(value);
useEffect(() => {
const t = setTimeout(() => setDebounced(value), delay);
return () => clearTimeout(t);
}, [value, delay]);
return debounced;
}useMediaQuery hook
React · jsximport { useEffect, useState } from 'react';
export function useMediaQuery(query) {
const [matches, setMatches] = useState(false);
useEffect(() => {
const m = window.matchMedia(query);
const handler = () => setMatches(m.matches);
handler();
m.addEventListener('change', handler);
return () => m.removeEventListener('change', handler);
}, [query]);
return matches;
}Email validation
Regex · jsconst isEmail = (v) =>
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);Slugify a string
JavaScript · jsconst slugify = (str) =>
str
.toLowerCase()
.trim()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');Strong password regex
Regex · js// 8+ chars, upper, lower, number, symbol
const strong =
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{8,}$/;Format bytes
JavaScript · jsfunction formatBytes(bytes, decimals = 1) {
if (!bytes) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${parseFloat((bytes / k ** i).toFixed(decimals))} ${sizes[i]}`;
}Sleep / delay
JavaScript · jsconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// usage: await sleep(500);Center with flex
CSS · css.center {
display: flex;
align-items: center;
justify-content: center;
}Truncate to N lines
CSS · css.clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}