Reputation: 281
I'm passing some data from one page to another via query params but I want to hide the query from the URL.
Here is my code.
import { useRouter } from "next/router";
const handleFormSubmit = async (values) => {
const res = await AuthService.login(values.email, values.password);
if (res.status === 200) {
if (res.data.is_phone_number_exists === 1 && res.data.is_phone_number_verified === 0) {
router.push({
pathname: '/otp-verification',
query: { email: values.email, password: values.password, phone_number: res.data.phone_number} //I want hide this query part from the url
})
}
}
}
How to hide the query params from the URL while using the router.push()
? Or is there any other way for doing the same thing?
Upvotes: 16
Views: 34687
Reputation: 31
Just use with as
.
push(
{
pathname: "/games/1023123", // to route
query: { data: JSON.stringify({name: "john",surname:"doe"}) }, //parameters
},
"/games/pinball" // as prop (what browser shows in url)
)
Upvotes: 0
Reputation: 91
To hide your parameters on the url you can use the linkAs prop
<Link href={`/blogs/${item.slug}?id=${item.id}`} linkAs={`/blogs/${item.slug}`}> Read More </Link>
Upvotes: 1
Reputation: 1094
You can use as
props with next/link
as well, to hide query parameters.
for Example:
<Link href={`/blogs/${item.slug}?id=${item.id}`} as={`/blogs/${item.slug}`} passHref>
<a href="" className="hover:text-cyanBlue">
Read More
</a>
</Link>
Bear in mind, this won't work if you set target="_blank" to anchor tag or open link to next tab of browser.
Upvotes: 6
Reputation: 50418
When using next/router
, you can pass query parameters without being visible on the address bar using the second argument as
in the router.push
call.
router.push({
pathname: '/otp-verification',
query: { email: values.email, password: values.password, phone_number: res.data.phone_number }
}, '/otp-verification')
Upvotes: 44
Reputation: 198
you can use params property in push method if you don't want the parameters show up.
router.push({
pathname: '/otp-verification',
params: { email: values.email, password: values.password, phone_number: res.data.phone_number} //I want hide this query part from the url
})
also there is a as
prop in next <Link>
component. not sure if you can use that in push method
<Link to= "/posts?title=test" as="/posts" />
Upvotes: 0