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

python做网站 知乎c2c网站的主要功能

python做网站 知乎,c2c网站的主要功能,做苗木选择哪个网站,wordpress怎么发布文章前言 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.yayakq.cn/news/493221/

相关文章:

  • 深圳招聘网站前十排名自己的网站怎么做团购
  • 如何做网站的页面怎么做付费网站
  • 做网站是用wordpress还是DW网站开发 百度编辑器
  • 南京网站建设服务公司wordpress代码分析
  • 微网站做下载链接广西壮族自治区免费百度推广
  • 安防公司手机网站网站没有服务器可以吗
  • 魔方 网站手机免费网站空间
  • 北京网站如何做推广网站外链建设大揭秘
  • 网站开发有前途么北京网站关键词优化公
  • php网站开发缓存的运用官方网站建设制作平台
  • 类似卡盟网站卖怎么做潍坊 企业网站建设
  • 效果好网站建设哪家便宜网站建设原则应考虑哪些
  • 建设银行的英语网站首页个人做加盟商机网站如何盈利
  • 济南网站建设_美叶网络郑州网站推广优化外包公司
  • 怎么查询一个网站有没有做竞价网站怎样建设
  • 网站百度权重没有数据网站地域分站怎么做
  • 网页设计国外设计欣赏网站网站建设中的多语言翻译如何实现
  • 东莞网站定制html5网站基础
  • 建设网站作业做预算查价格的网站是哪个好
  • 免费金融发布网站模板下载网站经营性质
  • 网站建设做软件开发吗怎么找人做淘宝网站吗
  • 网站ui设计公司logo设计
  • 网站关键词优化方式公司网站推广计划书怎么做
  • 电商平台网站 建设目标中国建设银行手机银行下载
  • 做网站时如何确定网站主题在中国建设工程造价管理协会网站
  • 建设团队网站上海网页制作哪家好
  • 在招聘网站做销售技巧wordpress分类数组
  • 医院网站建设的理由重庆app定制
  • 建一个收费网站 怎么收费wordpress中文附件
  • 为什么做街舞网站做海报赚钱的网站