React Router V7 踩坑指南

React Router V7 踩坑指南

  • react router 中取消严格模式渲染

react router 在作为框架使用的时候,默认是启用的严格模式进行渲染的,而且文件的入口默认是 react router 内部生成的。

但是 react router 提供了我们自定义配置文件的方式去更改 client 入口

建议在没有任何问题产生的情况下,尽量使用 react 的严格模式,这样可以防止一些简单的错误。

在生产模式下,react 是不会启动严格模式的,即使设置了。

链接问题地址

默认情况下,React Router 将为您处理客户端上的应用。您可以使用以下命令显示默认的入口客户端文件:

bash 复制代码
react-router reveal

这样就会生成两个文件

  • entry.client.tsx

  • entry.server.tsx

entry.client.tsx (默认的内容)

tsx 复制代码
import { startTransition, StrictMode } from "react";
import { hydrateRoot } from "react-dom/client";
import { HydratedRouter } from "react-router/dom";

startTransition(() => {
  hydrateRoot(
    document,
    <StrictMode>
      <HydratedRouter />
    </StrictMode>
  );
});

这里可以看到默认使用的是 严格模式,加 react/client 的水和作用进行渲染的

在 wujie 当中水和作用会因为 wujie 在未完成的时候会去访问 window 对象,导致浏览器控制台报错

这里直接变为 react 的 createRoot 的方式使用 HTML 渲染。

修改后的代码

tsx 复制代码
import { startTransition, StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { HydratedRouter } from "react-router/dom";

startTransition(() => {
  createRoot(document).render(
    <StrictMode>
      <HydratedRouter />
    </StrictMode>
  );
});

当然这里我们也可以选择取消严格模式

  • 解决控制台会出现提示信息

Hey developer 👋. You can provide a way better UX than this when your app is loading JS modules and/or running clientLoader functions. Check out remix.run/route/hydra...

github issues 地址

解决方法

在 root.tsx 中 加入

tsx 复制代码
export function HydrateFallback() {
  return <p>Loading </p>;
}
相关推荐
GreenTea1 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd3 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌3 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈3 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫3 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝3 小时前
svg图片
前端·css·学习·html·css3
王夏奇4 小时前
python中的__all__ 具体用法
java·前端·python
大家的林语冰4 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong235 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
田八5 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员