navigate(href, options?) changes the current location
programmatically. The component <Navigate>
is a JSX wrapper around the same function, for when you want to
redirect declaratively from inside a route. Part of
pota/use/location.
| name | type | description |
|---|---|---|
href |
url | Absolute when it starts with / or includes a protocol (http://…); anything else (#hash, page/2) resolves against window.location.href. |
params? |
key-value pairs object | used to replace params in the href for the URI encoded equivalents. <Navigate path="/some/:cat/:page" params={{ cat: 'variété', page: 'touché' }}/> will navigate to /some/vari%C3%A9t%C3%A9/touch%C3%A9. Same with navigate(...). |
replace? |
boolean [false] |
replace the current browser history entry instead of pushing a new one |
scroll? |
boolean [true] |
scroll to the target hash (or top of the page) after navigating |
delay? |
number |
milliseconds to wait before navigating; the navigation is deferred via a timeout. Omit for immediate navigation. |
Calls navigate from an event handler, replacing the :cat / :page
segments via params and skipping the scroll. delay defers the jump
so a transition or message can play first.
import { render } from 'pota'
import { navigate } from 'pota/use/location'
function App() {
return (
<div>
<button
on:click={() =>
navigate('/somewhere/:cat/:page', {
params: { cat: 'variété', page: 'touché' },
scroll: false,
})
}
>
go now
</button>
<button on:click={() => navigate('/home', { delay: 2000 })}>
go home in 2s
</button>
</div>
)
}
render(App)
<Navigate> tagRedirects declaratively from inside a route — rendering <Navigate>
triggers the same navigation, here replacing the history entry so the
redirect leaves no back-button trace.
import { render } from 'pota'
import { Navigate, Route } from 'pota/components'
function App() {
return (
<Route path="/old">
<Navigate
path="/somewhere/:cat/:page"
params={{ cat: 'variété', page: 'touché' }}
replace={true}
/>
</Route>
)
}
render(App)