С помощью shallow-routing
возможно изменение URL без перезагрузки страницы. Его можно включить, передав явный объект параметра в качестве третьего аргумента в Router.push
, т.е. { shallow: true }
Из docs
Мелкая маршрутизация позволяет вам измените URL-адрес без повторного запуска методов выборки данных, включая getServerSideProps
, getStaticProps
и getInitialProps
.
. Вы получите обновленные pathname
и query
через router
объект (добавлен useRouter
или withRouter
) без потери состояния.
Например, вот как вы бы обновили параметр запроса sortBy
для пути /products
с помощью shallow-routing
.
Router.push({
pathname: '/products',
query: { sortBy: 'price' }
},
undefined, { shallow: true }
)
Но есть несколько предостережений Невозможно использовать shallow-routing
между разными страницами, это работает только для изменений URL одной и той же страницы. См. Подробности в разделе caveat .
Например, вы можете обновить параметр запроса для страницы /product
page, но это будет невозможно, если вы попытаетесь сделать shallow-routing
от /product
до /product/[slug]
, потому что это две разные страницы.
// page will reload because shallow-routing not possible between the pages
Router.push('/product', '/product/some-product?sortBy=price', { shallow: true })