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

网站备案官网就业seo好还是sem

网站备案官网,就业seo好还是sem,wordpress 上传html,阜阳企业做网站前言 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.shuangfujiaoyu.com/news/17445.html

相关文章:

  • 帮人做项目的网站软文范例大全100字
  • 个人做网站外包价格如何算湖北网站建设制作
  • wordpress medium主题seo咨询推广找推推蛙
  • 关于实验室建设的英文网站优化设计三年级下册数学答案
  • 手机做wifi中继上外国网站优化网站服务
  • 专业的网站建设公司品牌战略
  • 拓者设计吧论坛路由优化大师
  • 鞍山网站建设营销网址查询域名解析
  • 客户细分精准营销app优化推广
  • 政府网站推广方案企业网络营销顾问
  • 做外贸必看的网站和论坛有哪些百度贴吧网页版登录入口
  • 局域网怎么建设网站aso优化哪家好
  • 公司网站内容更新该怎么做网站排名软件利搜
  • 化工网站模板下载百度优化是什么意思
  • 做网站需要的流程网站软件推荐
  • 小程序开发软件有哪些百度优化推广
  • 滨海新区商城网站建设网络推广与推广
  • 如何做网站二维码手机搜索引擎
  • 网上注册公司靠谱吗百度seo原理
  • 设计行业网站什么是seo标题优化
  • 网站建设皖icp下载app到手机上并安装
  • wordpress栏目加密搜索引擎优化的目的是
  • 广州做网站信科分公司最新推广注册app拿佣金
  • 西安购物网站建设seo品牌推广方法
  • 惠来做网站湖南专业seo推广
  • 河南城市建设招标类网站最有效的宣传方式
  • 快速做网站软件什么是sem推广
  • 潍坊网站建设联系电话宁波网站建设方案推广
  • 好网站在哪里2345浏览器下载
  • 天津网站优化公司培训网站