0.0.6-beta.22 • Published 2 years ago

enchanted-next-router v0.0.6-beta.22

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

🧙‍♂️ Enchanted Next.js Router minzipped size Coverage Status

It re-exports the whole next/router with redefined routing functions and extended params.

Install

With Yarn

yarn add enchanted-next-router

With npm

npm install enchanted-next-router

API

Functions

push/replace(url, opts)

push and replace are redefined. The redefined fuctions haven't second argument as because it's became unnecessary since 10.x

  • url: string - The URL to navigate to
  • options - Optional object with the following configuration options:
    • scroll: boolean (optional) - controls scrolling to the top of the page after navigation. true by default.
    • shallow: boolean - Update the path of the current page without rerunning getStaticProps, getServerSideProps or getInitialProps. false by default.
    • locale: string - Optional string, indicates locale of the new page.

Example

import Router from 'enchanted-next-router'

export default function MyComponent() {
  const { pathname } = useRouter()

  function handleClick() {
    // your logic
    Router.replace({ pathname, query: { id: '123' } }, { shallow: true })
  }

  return (
    <>
      <button onClick={handleClick}></button>
    </>
  )
}

const enchantedCtx = enchanteServerRouter(ctx)

Clean query object from url dynamic params

  • params - now params is always exist even if it is empty params will be empty object {}
  • query - clean up query from values from params
  • fullQuery - keeps original object with all of the query params

Example

// route: /foo/[fizz]/[buzz]
//   url: /foo/bar/boom?id=5431
import { enchanteServerRouter } from 'enchanted-next-router'

function getServerSideProps(c) {
  const ctx = enchanteServerRouter(c)
  const {
    params,    // { fizz: 'bar', buzz: 'boom' }
    query,     // { id: '5431' }
    fullQuery  // { id: '5431', fizz: 'bar', buzz: 'boom' }
  } = ctx

  return {
    props: {
      params,
      query,
      fullQuery,
    },
  }
}

Properties

const { query, params, pathname } = useRouter()

  • pathname - Represents current pathname in the URL.
  • params - Contains params from dynamic params of the URL.
  • query - Contains only params from query string.
  • fullQuery - Contains original query value before changes.

Example

// route: /foo/[fizz]/[buzz]
//   url: /foo/bar/boom?id=5431

export default function BuzzPage() {
  const {
    params,    // { fizz: 'bar', buzz: 'boom' }
    query,     // { id: '5431' }
    fullQuery  // { id: '5431', fizz: 'bar', buzz: 'boom' }
  } = useRouter()
  
  return (
    <article>
      <h4>Params</h4>
      <code><pre>JSON.stringify(params)</pre></code>
      <h4>Query</h4>
      <code><pre>JSON.stringify(query)</pre></code>
      <h4>Full Query</h4>
      <code><pre>JSON.stringify(fullQuery)</pre></code>
    </article>
  )
}

References

Creds

I want to say thanks to the Next.js team and Vercel. I appreciate their work and the things that they've done. I like using Next.js in my projects but I want to make some parts of it a bit better. As a result, I decided to share my handy enhancement on Next.js Router.

0.0.6-beta.19

2 years ago

0.0.6-beta.18

2 years ago

0.0.6-beta.17

2 years ago

0.0.6-beta.22

2 years ago

0.0.6-beta.21

2 years ago

0.0.6-beta.20

2 years ago

0.0.6-beta.16

3 years ago

0.0.6-beta.15

3 years ago

0.0.6-beta.14

3 years ago

0.0.6-beta.13

3 years ago

0.0.6-beta.12

3 years ago

0.0.6-beta.11

3 years ago

0.0.6-beta.10

3 years ago

0.0.6-beta.9

3 years ago

0.0.6-beta.8

3 years ago

0.0.6-beta.7

3 years ago

0.0.6-beta.6

3 years ago

0.0.6-beta.5

3 years ago

0.0.6-beta.4

3 years ago

0.0.6-beta.3

3 years ago

0.0.6-beta.2

3 years ago

0.0.6-beta1

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago