useSearchParams
useSearchParams geçerli URL'nin sorgu dizesini okumanızı sağlayan bir İstemci Bileşeni kancasıdır.
useSearchParams 'nin salt okunur bir sürümünü döndürür. URLSearchParams arayüz.
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// URL -> `/dashboard?search=my-project`
// `search` -> 'my-project'
return <>Search: {search}</>
}Parameters
const searchParams = useSearchParams()useSearchParams herhangi bir parametre almaz.
Returns
useSearchParams 'nin salt okunur bir sürümünü döndürür. URLSearchParams arayüzü, URL'nin sorgu dizesini okumak için yardımcı yöntemler içerir:
-
URLSearchParams.get(): Arama parametresiyle ilişkili ilk değeri döndürür. Örneğin:URL searchParams.get("a")/dashboard?a=1'1'/dashboard?a=''/dashboard?b=3null/dashboard?a=1&a=2'1'- tüm değerleri almak içingetAll()adresini kullanın -
URLSearchParams.has(): Verilen parametrenin var olup olmadığını gösteren bir boolean değeri döndürür. Örneğin:URL searchParams.has("a")/dashboard?a=1true/dashboard?b=3false -
'nin diğer tuz okunur yöntemleri hakkında daha fazla bilgi edinin.
URLSearchParamsdahil olmak üzeregetAll(),keys(),values(),entries(),forEach()vetoString().
Bildiğim iyi oldu:
useSearchParamsbir İstemci Bileşe ni kancasıdır ve kısmi oluşturma sırasında eski değerleri önlemek için Sunucu Bileşenlerinde desteklenmez.- Bir uygulama
/pagesdizinini içeriyorsa,useSearchParamsdeğeriReadonlyURLSearchParams | nulldeğerini döndürür.nulldeğeri geçiş sırasında uyumluluk içindir, çünkü arama parametreleri kullanmayan bir sayfanın ön oluşturma işlemi sırasında bilinemezgetServerSideProps
Static Rendering
Bir rota statik olarak işleniyorsa, useSearchParams çağrısı, en yakın Suspense sınırına kadar olan İstemci Bileşeni ağacının istemci tarafında işlenmesine neden olur.
Bu, rotanın bir kısmının statik olarak işlenmesini sağlarken, useSearchParams adresini kullanan dinamik kısım istemci tarafında işlenir.
useSearchParams kullanan İstemci Bileşenini bir <Suspense/> sınırına sarmanızı öneririz. Bu, üzerindeki tüm İstemci Bileşenlerinin statik olarak işlenmesine ve ilk HTML'nin bir parçası olarak gönderilmesine olanak tanıyacaktır. Örnek.
Örneğin:
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// This will not be logged on the server when using static rendering
console.log(search)
return <>Search: {search}</>
}import { Suspense } from 'react'
import SearchBar from './search-bar'
// This component passed as a fallback to the Suspense boundary
// will be rendered in place of the search bar in the initial HTML.
// When the value is available during React hydration the fallback
// will be replaced with the `<SearchBar>` component.
function SearchBarFallback() {
return <>placeholder</>
}
export default function Page() {
return (
<>
<nav>
<Suspense fallback={<SearchBarFallback />}>
<SearchBar />
</Suspense>
</nav>
<h1>Dashboard</h1>
</>
)
}Behavior
Dynamic Rendering
Bir rota dinamik olarak işleniyorsa, İstemci Bileşeninin ilk sunucu işlenmesi sırasında useSearchParams sunucuda kullanılabilir olacaktır.
Örneğin:
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// This will be logged on the server during the initial render
// and on the client on subsequent navigations.
console.log(search)
return <>Search: {search}</>
}import SearchBar from './search-bar'
export const dynamic = 'force-dynamic'
export default function Page() {
return (
<>
<nav>
<SearchBar />
</nav>
<h1>Dashboard</h1>
</>
)
}Bilmekte fayda var:
dynamicroute segment config seçeneğiniforce-dynamicolarak ayarlamak dinamik oluşturmayı zorlamak için kullanılabilir.
Server Components
Pages
Sayfalardaki (Sunucu Bileşenleri) arama parametrelerine erişmek için searchParams prop.
Layouts
Sayfaların aksine, Düzenler (Sunucu Bileşenleri) searchParams prop'unu almaz. Bunun nedeni, paylaşılan bir düzenin gezinme sırasında yeniden işlenmemesidir, bu da gezinmeler arasında searchParams adresinin bayatlamasına neden olabilir. Ayrıntılı açıklamayı görüntüleyin.
Bunun yerine, Sayfa searchParams pervane veya useSearchParams istemcide en son searchParams ile yeniden oluşturulan bir İstemci Bileşenindeki kanca.
Examples
Updating searchParams
Kullanabilirsiniz useRouter veya Link yeni searchParams ayarlamak için. Bir navigasyon gerçekleştirildikten sonra, mevcut page.js güncellenmiş bir searchParams prop alacaktır.
export default function ExampleClientComponent() {
const router = useRouter()
const pathname = usePathname()
const searchParams = useSearchParams()
// Get a new searchParams string by merging the current
// searchParams with a provided key/value pair
const createQueryString = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(searchParams.toString())
params.set(name, value)
return params.toString()
},
[searchParams]
)
return (
<>
<p>Sort By</p>
{/* using useRouter */}
<button
onClick={() => {
// <pathname>?sort=asc
router.push(pathname + '?' + createQueryString('sort', 'asc'))
}}
>
ASC
</button>
{/* using <Link> */}
<Link
href={
// <pathname>?sort=desc
pathname + '?' + createQueryString('sort', 'desc')
}
>
DESC
</Link>
</>
)
}Version History
| Version | Changes |
|---|---|
v13.0.0 | useSearchParams introduced. |