Performance: URL state with searchParams
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 |
useSearchParams hook in Next.js App Router do?useSearchParams in a Next.js component??page=3&sort=asc?
import { useSearchParams } from 'next/navigation';
export default function Page() {
const searchParams = useSearchParams();
console.log(searchParams.get('page'));
console.log(searchParams.get('sort'));
return null;
}import { useSearchParams } from 'next/navigation';
export default function Page() {
const params = useSearchParams;
const filter = params.get('filter');
return <div>Filter: {filter}</div>;
}search. Which approach correctly updates the displayed list when the URL changes without a full page reload?
import { useSearchParams } from 'next/navigation';
import { useEffect, useState } from 'react';
export default function SearchPage() {
const searchParams = useSearchParams();
const [searchTerm, setSearchTerm] = useState('');
// Which code below correctly updates searchTerm when URL changes?
// A:
// useEffect(() => {
// setSearchTerm(searchParams.get('search') || '');
// }, [searchParams]);
// B:
// setSearchTerm(searchParams.get('search') || '');
// C:
// useEffect(() => {
// setSearchTerm(searchParams.search || '');
// }, [searchParams]);
// D:
// useEffect(() => {
// setSearchTerm(searchParams.get('searchTerm') || '');
// }, [searchParams]);
return <div>Search: {searchTerm}</div>;
}Pass the test and this pattern moves unknown