useSearchParams() & suspense boundary
Used in this guide:Next.js 15.3.3
Vercel
Loading...
useSearchParams() should be wrapped in a suspense boundary at page '/payment-success'. Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout
When using useSearchParams() inside a Server Component (like a page.tsx) in Next.js 13+ with App Router, you might run into this error
This happens even when you've added 'use client' and wrapped your component with <Suspense>. Here’s why it happens and how to fix it properly.
'use client';
import { useSearchParams } from 'next/navigation';
export default function PaymentSuccessPage() {
const params = useSearchParams();
const status = params.get('status');
return <div>Payment status: {status}</div>;
}import { Suspense } from 'react';
import PaymentStatusClient from './PaymentStatusClient';
export default function PaymentSuccessPage() {
return (
<Suspense fallback={<div>Loading status...</div>}>
<PaymentStatusClient />
</Suspense>
);
}'use client';
import { useSearchParams } from 'next/navigation';
export default function PaymentStatusClient() {
const params = useSearchParams();
const status = params.get('status');
return <div>Payment status: {status}</div>;
}