当前位置: 首页 > news >正文

做视频解析网站违法不品牌建设部门的规章制度

做视频解析网站违法不,品牌建设部门的规章制度,南京个人做网站的,东莞理工学院前言 createStaticRouter 是 React Router 专为 服务端渲染(SSR) 设计的 API,用于在服务器端处理路由匹配和数据加载。它在构建静态 HTML 响应时替代了客户端的 BrowserRouter,确保 SSR 和客户端 Hydration 的路由状态一致。 一…

前言

createStaticRouterReact Router 专为 服务端渲染(SSR) 设计的 API,用于在服务器端处理路由匹配数据加载。它在构建静态 HTML 响应时替代了客户端的 BrowserRouter,确保 SSR 和客户端 Hydration 的路由状态一致。

一、createStaticRouter 核心用途

  1. 服务端路由匹配:根据请求 URL 确定渲染的组件
  2. 数据预加载:执行路由的 loader 函数获取初始数据
  3. 错误处理:捕获渲染过程中的路由级错误
  4. SSR/SSG 支持:生成包含初始数据的静态 HTML

二、createStaticRouter 使用步骤详解(配合 Express 示例)

2.1、 定义路由配置

// src/routes.js
import HomePage from "./pages/Home";
import UserPage from "./pages/User";export const routes = [{path: "/",loader: () => fetch("/api/data"), // 数据加载函数element: <HomePage />,errorElement: <ErrorPage /> // 错误边界},{path: "/user/:id",loader: ({ params }) => fetch(`/api/users/${params.id}`),element: <UserPage />}
];

2.2、 服务端路由处理

// server.js
import express from "express";
import { createStaticRouter,StaticRouterProvider 
} from "react-router-dom/server";
import { routes } from "./src/routes";const app = express();app.use("*", async (req, res) => {// 1. 创建请求感知的静态路由const router = createStaticRouter(routes, {basename: "/app",      // 基础路径location: req.originalUrl // 当前请求路径});// 2. 触发所有匹配路由的 loaderconst promises = router.matches.map(match => match.route.loader?.({ request: req, params: match.params }));// 3. 等待数据加载完成const loaderData = await Promise.all(promises);// 4. 将数据注入路由上下文const context = {loaderData,errors: null // 可捕获 loader 错误};// 5. 渲染为 HTML 字符串const html = ReactDOMServer.renderToString(<StaticRouterProvider router={router} context={context} />);// 6. 拼接完整 HTML 响应res.send(`<html><body><div id="root">${html}</div><script>// 注入初始数据供客户端 Hydration 使用window.__STATIC_CONTEXT = ${JSON.stringify(context)};</script></body></html>`);
});

2.3、 客户端 Hydration

// src/client.js
import { hydrateRoot } from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import { routes } from "./routes";// 复用路由配置
const router = createBrowserRouter(routes, {basename: "/app",hydrationData: window.__STATIC_CONTEXT // 注入服务端数据
});hydrateRoot(document.getElementById("root"),<RouterProvider router={router} />
);

三、createStaticRouter关键配置说明

参数 作用

  1. basename: 应用基础路径 (e.g. /app)
  2. location: 当前请求 URL 对象 (必需)
  3. router.matches: 当前 URL 匹配的路由对象数组
  4. context.loaderData: 存储 loader 返回数据的数组,索引与 router.matches 顺序一致

四、createStaticRouter 错误处理机制

// 在路由配置中添加错误边界
{path: "/user/:id",element: <UserPage />,errorElement: <ErrorLayout />, // 捕获本路由及子路由错误loader: async () => {const res = await fetchData();if (res.status === 404) {throw new Response("Not Found", { status: 404 }); // 抛出错误}return res.json();}
}// 服务端捕获错误
try {await Promise.all(promises);
} catch (error) {context.errors = error; // 传递到 StaticRouterProvider
}

五、createStaticRouter 最佳实践

  1. 数据序列化:确保 loader 返回的数据可被序列化为 JSON
  2. 错误类型:使用 Response 对象抛出 HTTP 错误状态
  3. 路由复用:服务端/客户端使用相同的路由配置对象
  4. 缓存控制:对静态路由实现 loader 数据缓存

注意createStaticRouter 仅用于服务端环境,客户端应使用 createBrowserRoutercreateMemoryRouter

http://www.dtcms.com/a/446780.html

相关文章:

  • 建筑设计地图网站桐乡app开发
  • Linux的系统调用是怎么样运行的
  • 备案 网站名称 修改河北建设安装工程有限公司怎么样
  • 【2026计算机毕业设计】基于jsp的药店管理系统
  • 做的网站在百度找不到wordpress网页排版插件
  • 【高并发服务器】二、时间轮定时器设计与实现
  • 【操作系统】多线程
  • 信阳seo优化seo有些什么关键词
  • Giants Shoulder - Hyrix: LPDDR5 Commands New Features
  • 有关网站建设的外文文献好习惯网站
  • 网站的内容与功能设计优书网所有书单
  • 小迪web自用笔记56
  • Spring Security 完整使用指南
  • 中咨城建设计有限公司 网站网站seo外链接
  • 什么样的网站利于优化上海外贸公司集中在哪里
  • app与手机网站门户网站建设制作
  • 电竞网站方案设计河北邯郸网络科技有限公司
  • 天津大学 2025 预推免 第二批 机试 题解
  • 中山市城市建设档案馆网站wordpress dux 高亮
  • 免费空间做淘宝客网站wordpress收缩
  • 海报模板免费网站做阿里云网站空间
  • 深度特征工程实战:从数据到模型的关键一步
  • 帮人做网站怎么收费微信管理平台登录
  • 国外网站建设接单韩国做游戏的电影 迅雷下载网站有哪些
  • 哪些网站是phpwind做的国内wordpress有名主题
  • asp做网站教程强大的网站设计制作
  • 中国建设银行网站 纪念币预约企业网址下载
  • xfreerdp 使用指南:FreeRDP 客户端详解与 RDP 协议深度解析
  • 深圳高端网站设计开发企业系统工程
  • RK3588:MIPI底层驱动学习——入门第四篇(驱动精华:OV13855驱动加载时究竟发生了什么?)