Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditional component render based on route in next js

is there a way to conditionally render components based on URL in next.js?

Edit:

as if now, I'm doing this:

const router = useRouter();

return (
  <>
    <SomeComponent />
    {router.pathname === "/somePath" && <RenderThis />}
  </>
)

I'm wondering if there's a better/cleaner way to this conditional render? like...

<>
  <SomeComponent />
  <Route path="/additionalUrl" component={RenderThis} />
</>

//or

<>
  <SomeComponent />
  <Route path="/additionalUrl">
     <RenderThis />
  </Route>
</>
like image 986
Naeem Ahmad Avatar asked Feb 07 '21 16:02

Naeem Ahmad


1 Answers

The style of your second example is reminiscent of React Router, so I can see where you're coming from.

However, in Next.js, filesystem based routing is implemented, and routing is handled for you based on the filename in the /pages directory.

If you are handling many different query parameters in your URLs, Next.js handles that as well, using dynamic routes

From the above linked docs:

Consider the following page pages/post/[pid].js:

import { useRouter } from 'next/router'

const Post = () => {
  const router = useRouter()
  const { pid } = router.query

  return <p>Post: {pid}</p>
}

export default Post

Any route like /post/1, /post/abc, etc. will be matched by pages/post/[pid].js. The matched path parameter will be sent as a query parameter to the page, and it will be merged with the other query parameters.

like image 51
giraffesyo Avatar answered Oct 03 '22 22:10

giraffesyo