es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NextJS – Detener el refresco de la página después de cierta ruta

Estoy intentando combinar NextJS con CRA y me gustaría usar el enrutador de React después de cierta ruta en NextJS.
Por ejemplo:

Está bien la actualización entre estas dos páginas:

https://localhost:3000/page1 --> https://localhost:3000/page2 

No quiero la actualización entre estas dos páginas:

https://localhost:3000/app/page1 --> https://localhost:3000/app/page2 

Sé que el componente Link existe:

import Link from 'next/link';

Pero no uso ese componente en CRA.

¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para combinar NextJS con CRA y usar react-router después de algunas rutas en NextJS, puedes seguir estos pasos:

    1. Instala react-router-dom usando npm o yarn:
    npm install --save react-router-dom
    

    o

    yarn add react-router-dom
    
    1. Crea un nuevo archivo, por ejemplo AppRouter.js, en el directorio src de tu proyecto de CRA:
    import React from 'react';
    import { Route, Switch } from 'react-router-dom';
    import Page1 from './pages/Page1';
    import Page2 from './pages/Page2';
    
    const AppRouter = () => {
      return (
        <switch>
          <route exact="" path="/app/page1" component="{Page1}"></route>
          <route exact="" path="/app/page2" component="{Page2}"></route>
        </switch>
      );
    }
    
    export default AppRouter;
    
    1. Importa el componente AppRouter dentro de tus páginas de NextJS:
    import AppRouter from '../src/AppRouter';
    
    const MyAppPage = () => {
      return (
        <div>
          <h1>Mi Página</h1>
          <approuter></approuter>
        </div>
      );
    };
    
    export default MyAppPage;
    
    1. Agrega una ruta de servidor personalizada en tu aplicación NextJS para manejar estas rutas de CRA:
    // server.js
    const { createServer } = require('http');
    const { parse } = require('url');
    const next = require('next');
    const appRouter = require('./src/AppRouter').default;
    
    const dev = process.env.NODE_ENV !== 'production';
    const app = next({ dev });
    const handle = app.getRequestHandler();
    
    app.prepare().then(() => {
      createServer((req, res) => {
        const parsedUrl = parse(req.url, true);
        const { pathname, query } = parsedUrl;
    
        if (pathname.startsWith('/app')) {
          appRouter(req, res, parsedUrl);
        } else {
          handle(req, res, parsedUrl);
        }
      }).listen(3000, (err) => {
        if (err) throw err;
        console.log('> Listo en http://localhost:3000');
      });
    });
    

    Este código de servidor separa las solicitudes para rutas que comienzan con ‘/app’ y las envía al componente AppRouter para que las maneje.

    Con esta configuración, puedes usar el componente Link de NextJS en tus páginas de NextJS y los componentes de react-router-dom en tus páginas de CRA. Puedes navegar entre tus páginas de NextJS y CRA sin una actualización completa, excepto por las rutas que comienzan con ‘/app’, las cuales serán manejadas por el componente AppRouter.

Comments are closed.