Skip to main content

Archive

Show more

Nextjs Shallow Routing

Next.js - Shallow Routing

Shallow routing in Next.js allows for navigation between pages without losing state, providing a smoother user experience by updating the URL without reloading the page.


1. useRouter Hook

The useRouter hook from the next/router module provides methods for shallow routing, enabling developers to navigate between pages while preserving component state.

import { useRouter } from 'next/router';

function MyComponent() {
    const router = useRouter();

    const handleShallowRouting = () => {
        router.push('/about', undefined, { shallow: true });
    };

    return (
        <button onClick={handleShallowRouting}>Go to About Page (Shallow)</button>
    );
}

export default MyComponent;

In this example, the router.push method is used with the shallow option set to true to perform shallow routing to the /about page.


2. State Preservation

Shallow routing preserves the state of the current page component while navigating to a new page, ensuring that component state is retained.

import { useRouter } from 'next/router';

function DynamicPage() {
    const router = useRouter();

    const handleShallowNavigation = () => {
        router.push('/posts/[id]', '/posts/1', { shallow: true });
    };

    return (
        <button onClick={handleShallowNavigation}>Go to Post 1 (Shallow)</button>
    );
}

export default DynamicPage;

In this example, the router.push method is used with the shallow option set to true to perform shallow routing to the dynamic route /posts/[id] with the parameter 1.


3. Conditional Shallow Routing

Conditional shallow routing allows for dynamic navigation based on application state or user input, preserving component state during navigation.

import { useRouter } from 'next/router';

function ConditionalPage() {
    const router = useRouter();

    const handleConditionalShallowRouting = (path) => {
        if (path === 'home') {
            router.push('/', undefined, { shallow: true });
        } else if (path === 'about') {
            router.push('/about', undefined, { shallow: true });
        }
    };

    return (
        <div>
            <button onClick={() => handleConditionalShallowRouting('home')}>Go Home (Shallow)</button>
            <button onClick={() => handleConditionalShallowRouting('about')}>Go to About (Shallow)</button>
        </div>
    );
}

export default ConditionalPage;

In this example, the router.push method is used with the shallow option set to true for conditional shallow routing based on the provided path.


Conclusion

Shallow routing in Next.js provides a seamless way to navigate between pages without losing component state. By leveraging the shallow option in the Router object methods, developers can enhance user experience and maintain state consistency across page transitions.

Comments