3 votes

Routage imbriqué JS suivant

-component
---->sidebar.js
---->exampleTabOne.js
---->exampleTabTwo.js
---->exampleTabThree.js

--pages
---->setting(which include all sidebar and those exampletabs)

J'ai la structure de dossier ci-dessus dans mon nextJS projet. ici selon la documentation de nextjs

sur localhost/setting je peux facilement voir ma page mais ce que je veux réaliser, c'est quelque chose comme ci-dessous :

1.localhost/setting/exampleTabOne
2.localhost/setting/exampleTabTwo/EXAMPLEID
3.localhost/setting/exampleTabThree/EXAMPLEID#something#something 

La dernière partie Url avec # est quelque chose comme à l'intérieur du contenu de l'onglet j'ai d'autres onglets donc je veux le fixer avec Hash url pour que pendant le ssr je puisse facilement ouvrir cet onglet aussi .

Alors, pourriez-vous me conseiller sur la façon de résoudre ce problème ?

0voto

Bijay Rai Points 681

Ici, dans Next JS, nous pouvons réaliser ceci en définissant dans le fichier server.js.

// This file doesn't go through babel or webpack transformation.
// Make sure the syntax and sources this file requires are compatible with the current node version you are running
// See https://github.com/zeit/next.js/issues/1245 for discussions on Universal Webpack or universal Babel
const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  createServer((req, res) => {
    // Be sure to pass `true` as the second argument to `url.parse`.
    // This tells it to parse the query portion of the URL.
    const parsedUrl = parse(req.url, true);
    const { pathname, query } = parsedUrl;

    if (pathname === '/setting/exampleTabOne') {
      app.render(req, res, '/setting', query);
    } else if (pathname === '/setting/exampleTabTwo/EXAMPLEID') {
      app.render(req, res, '/setting', query);
    } else {
      handle(req, res, parsedUrl);
    }
  }).listen(3000, err => {
    if (err) throw err;
    console.log('> Ready on http://localhost:3000');
  });
});

Dans la page de configuration, nous pouvons charger dynamiquement le composant respectif en regardant le chemin d'accès à l'url.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X