3

When using Next.js, I want to show a modal based on a url, on top of another page.

If gallery.js is the page component, I want /gallery/image/1232132 to display a modal with an image, on top of the gallery page.

Is that possible?

Nir Ben-Yair
  • 1,392
  • 11
  • 16

2 Answers2

5

If I understand your question correctly you want to add deep links to the individual gallery items. This is possible, but you need a custom server to handle custom routes.

The first thing you need to do is setup the routes. I shared an example here: using React router with Next JS route.

const nextRoutes = require('next-routes');
const routes = (module.exports = nextRoutes());

routes
    .add('gallery', '/gallery')
    .add('gallery-item', '/gallery/image/:image', 'gallery')

Then you can access this parameter in the getInitialProps method, and render the modal if the image parameter is set:

import React from 'react';
import PropTypes from 'prop-types';

export default class Gallery extends React.Component {
    static propTypes = {
        image: PropTypes.string
    };
    
    static getInitialProps({query: {image}}) {
        return {image};
    }

    render() {
        const {image} = this.props;

        return (
            <div>
                {image &&
                    // render modal
                }
                // render gallery
            </div>
        );
    }
}
ForrestLyman
  • 1,194
  • 12
  • 21
4

This question is a bit old, but since March 2020 there's a full example on the official Next.js repo (you should probably use this since it must be the "recommended way" by the maintainers):

https://github.com/vercel/next.js/tree/canary/examples/with-route-as-modal

Here's the original issue:

https://github.com/vercel/next.js/issues/8023

And the related PR:

https://github.com/vercel/next.js/pull/11473

Anatole Lucet
  • 883
  • 10
  • 28
  • Ok but this example give you either dynamic urls, or modals on top of the current page. It does not show how to have a modal on top of the current page that persists on a refresh – Meilech Sep 30 '20 at 17:44