route params는 경로의 대상, search params는 같은 화면의 보기 조건을 표현한다

둘 다 주소에서 온 외부 문자열이므로 추출한 즉시 변환·검증하고, 공유할 상태를 별도 local state에 복제하지 않는다.

/products/42?page=2&sort=price

useParams() · 경로 매치

:productId처럼 route pattern이 포착한 값을 읽는다. 자식 route는 부모 params도 상속하며, 값이 없거나 유효하지 않으면 해당 리소스 실패로 처리한다.

useSearchParams() · URLSearchParams

page·sort·filter처럼 선택 가능한 보기 조건을 읽고 쓴다. setter 호출은 navigation을 만들므로 링크 공유·새로고침·뒤로 가기와 같은 원본을 사용한다.

1. Readpathname match와 query string을 각각 읽는다.
2. Normalize숫자·enum·반복 key를 명시적으로 파싱한다.
3. Validate허용 범위 밖이면 404, 기본값, 정규 URL 중 정책을 적용한다.
4. Load / Navigate검증된 값으로 loader·query key를 만들고 변경은 URL에 반영한다.

문자열 경계Number() 결과, 빈 값, 중복 key의 getAll()을 의도적으로 처리한다.

직접 진입깊은 링크로 새로 열어도 loader가 필요한 데이터를 복원하고 오류 UI를 제공한다.

history 의미사용자가 되돌릴 변경은 push, 정규화·일시 교정은 replace 여부를 구분한다.