Performance: URL state with searchParams
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by how URL parameters are read and updated in the browser.
import { useRouter } from 'next/navigation'; import { useState, useEffect } from 'react'; export default function Search() { const router = useRouter(); const [value, setValue] = useState(''); useEffect(() => { const handler = setTimeout(() => { const params = new URLSearchParams(window.location.search); params.set('query', value); router.replace(`?${params.toString()}`); }, 300); return () => clearTimeout(handler); }, [value]); return <input type="text" value={value} onChange={e => setValue(e.target.value)} />; }
import { useRouter } from 'next/navigation'; export default function Search() { const router = useRouter(); const onChange = (e) => { const params = new URLSearchParams(window.location.search); params.set('query', e.target.value); router.replace(`?${params.toString()}`); }; return <input type="text" onChange={onChange} />; }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Update URL on every keystroke | Many router.replace calls causing repeated DOM updates | Multiple reflows per keystroke | High paint cost due to frequent updates | [X] Bad |
| Debounced URL update after typing stops | Single router.replace call per debounce interval | Single reflow per debounce | Lower paint cost, smoother interaction | [OK] Good |