cannot get params next.js v12
Answered
Mallow bee posted this in #help-forum
Mallow beeOP
It returns an empty object
import { useRouter } from "next/router";
import React from "react";
export default function TestPage() {
const router = useRouter();
console.log(router.query);
return <div>TestPage</div>;
}10 Replies
It will be empty during prerender if your page isn’t SSR
yes
You can refer to here: https://nextjs.org/docs/pages/api-reference/functions/use-router#router-object
add
router.isReady as useEffect dependencyAnswer
then on re render it will be available
@@ts-ignore add `router.isReady` as useEffect dependency
Mallow beeOP
export default function TestPage() {
const [loading, setLoading] = React.useState(false);
const [survey, setSurvey] = React.useState({});
const router = useRouter();
console.log(router.query.surveyId);
React.useEffect(() => {
const getSurvey = async () => {
console.log(router.query.surveyId);
};
getSurvey();
}, []);
return (
<>
<Navbar />
<Toaster position="bottom-center" reverseOrder={false} />
{loading ? (
<>
<div className="flex flex-col items-center justify-center h-[70vh]">
<Spinner size={10} />
</div>
</>
) : (
<> {survey?.title} </>
)}
</>
);
}it worked but nows it just saying router.query.surveyId is undefined
your dependency list is empty, and also ensure your page is under a dynamic route, or search parameters exist.
Giant panda
Also you need to listen to changes of
router.isReady as mentioned beforeuseEffect(() => {
// ...
}, [router.isReady])@Giant panda Also you need to listen to changes of `router.isReady` as mentioned before
Mallow beeOP
Got IT now, Thanks