MST

星途 面试题库

面试题:React Router在服务端渲染中的基本配置

请阐述在React服务端渲染(SSR)项目中,如何对React Router进行基本配置,以便正确处理页面路由?假设你使用的是Node.js作为服务端环境,简要说明主要步骤及关键代码片段。
26.2万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试

主要步骤

  1. 安装依赖:在项目中安装react-router相关包,包括react-router-dom(用于客户端路由)和react-router-server(用于服务端路由)。
npm install react-router-dom react-router-server
  1. 客户端路由配置:在客户端代码(通常是index.js)中配置路由。例如:
import React from 'react';
import ReactDOM from'react-dom';
import { BrowserRouter as Router, Routes, Route } from'react-router-dom';
import Home from './components/Home';
import About from './components/About';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Router>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/about" element={<About />} />
    </Routes>
  </Router>
);
  1. 服务端路由配置:在服务端代码(例如server.js)中配置路由。
import express from 'express';
import React from'react';
import { renderToString } from'react-dom/server';
import { StaticRouter } from'react-router-server';
import { Routes, Route } from'react-router-dom';
import App from './App';
import Home from './components/Home';
import About from './components/About';

const app = express();

app.get('*', (req, res) => {
  const context = {};
  const html = renderToString(
    <StaticRouter location={req.url} context={context}>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </StaticRouter>
  );
  // 这里可以根据context来处理重定向等情况
  res.send(`
    <!DOCTYPE html>
    <html>
      <head>
        <title>SSR with React Router</title>
      </head>
      <body>
        <div id="root">${html}</div>
        <script src="/client.js"></script>
      </body>
    </html>
  `);
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});
  1. 整合客户端和服务端:确保客户端和服务端的路由配置一致,这样在服务端渲染和客户端激活时,路由行为能保持一致。

关键代码解释

  1. 客户端BrowserRouterBrowserRouter(通常使用别名Router)用于在客户端处理基于浏览器的历史记录API,管理路由状态。RoutesRoute组件用于定义不同路径对应的组件。
  2. 服务端StaticRouterStaticRouter用于服务端渲染,它接收当前请求的location(即req.url),并根据路由配置渲染相应组件。context对象可以用于处理重定向等情况。在渲染完成后,将渲染结果嵌入到HTML模板中返回给客户端。