useRouter
The useRouter
hook provides client components access to Twofold's router. This hook is used to navigate between pages, preform refreshes, and access the current route.
Usage
To use the useRouter
hook:
"use client";
import { useRouter } from "@twofold/framework/use-router";
export default function ClientComponent() {
let router = useRouter();
return <p>The current path is {router.path}</p>;
}
The useRouter
hook can only be used in client components since it is a reactive hook that updates and re-renders as users navigate between pages.
Navigation
Programmatic navigation can be achieved by calling the navigate
or replace
functions from useRouter
:
"use client";
import { useRouter } from "@twofold/framework/use-router";
import { useEffect } from "react";
export default function ClientComponent() {
let { navigate } = useRouter();
function navigateOnClick() {
navigate("/new-page");
}
return <button onClick={navigateOnClick}>Go to new page</button>;
}
Replacing pages
The replace
function from useRouter
can be used instead of navigate
. The only difference is that unlike navigate
, it will replace the current page in the history stack instead of pushing a new entry.
"use client";
import { useRouter } from "@twofold/framework/use-router";
import { useEffect } from "react";
export default function ClientComponent() {
let { replace } = useRouter();
function replaceOnClick() {
replace("/new-page");
}
return <button onClick={replaceOnClick}>Replace page</button>;
}
Refreshing Pages & Layouts
The refresh
function from useRouter
is used to refresh the current page and its layouts:
"use client";
import { useRouter } from "@twofold/framework/use-router";
import { useEffect } from "react";
export default function ClientComponent() {
let { refresh } = useRouter();
return <button onClick={refresh}>Refresh page</button>;
}
The refresh
function will only update the data from server components, it leaves data and state associated with client components intact.
Return values
The functions and values returned by useRouter
:
"use client";
import { useRouter } from "@twofold/framework/use-router";
function ClientComponent() {
let { path, searchParams, navigate, replace, refresh } = useRouter();
// ...
}
The useRouter
hook returns an object with the following properties:
Property | Type | Description |
---|---|---|
path | string | The current path of the router. |
searchParams | URLSearchParams | The current search params of the router. |
navigate | (path: string, options?: NavigateOptions) => void | A function to navigate to a new page. |
replace | (path: string, options?: NavigateOptions) => void | A function to replace the current page in the history stack. |
refresh | () => void | A function to refresh the current page and its layouts. |
Navigate options
The following options can be passed to the navigate
and replace
functions:
Option | Type | Description |
---|---|---|
scroll | 'top' | 'preserve' | Default top . If preserve the page will not scroll to the top after navigation. |
mask | string | When set this path will be used in the browser's location bar. |