路由
React Router(v6+)是 React 生态中最常用的客户端路由库。见 React 基础。
基本配置(数据路由可选)
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import { Root } from "./Root";
import { Home } from "./pages/Home";
import { User } from "./pages/User";
const router = createBrowserRouter([
{
path: "/",
element: <Root />,
children: [
{ index: true, element: <Home /> },
{ path: "users/:userId", element: <User /> },
],
},
]);
export function App() {
return <RouterProvider router={router} />;
}
在 Root 布局组件中使用 <Outlet /> 渲染子路由。
声明式导航
import { Link, NavLink, useNavigate, useParams } from "react-router-dom";
// 链接
<Link to="/users/1">用户</Link>
// 编程式导航
const navigate = useNavigate();
navigate("/login");
// 读取动态参数
const { userId } = useParams();
路由守卫(鉴权)
React Router 无内置全局守卫,常见做法:
- 在布局路由的
loader中检查会话并重定向(数据路由 API)。 - 包装
<ProtectedRoute>组件:未登录则<Navigate to="/login" replace />。
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const isAuth = useAuth();
if (!isAuth) return <Navigate to="/login" replace />;
return <>{children}</>;
}
懒加载
const Dashboard = lazy(() => import("./pages/Dashboard"));
{
path: "dashboard",
element: (
<Suspense fallback={<p>加载中…</p>}>
<Dashboard />
</Suspense>
),
}
与 Vue Router 对照
| React Router 6 | Vue Router 4 | |
|---|---|---|
| 配置 | JSX 路由对象或 createBrowserRouter | routes 数组 |
| 出口 | <Outlet /> | <RouterView /> |
| 导航 | useNavigate / <Link> | useRouter / <RouterLink> |
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| React Router 文档 | 英文官方 |
| React Router:Tutorial | 入门 |
| React:lazy | 懒加载组件 |
相关文章
渲染与协调
React 将组件渲染为虚拟 DOM 树,再协调(reconciliation)到浏览器 DOM。理解该过程有助于解释 key、memo 与性能优化。涵盖渲染流程、Fiber、startTransition、Suspense、最佳实践与常见坑。
工程化
新建 React 项目时,官方与社区主流工具为 Vite;全栈场景常用 Next.js。涵盖 Vite + React、Create React App 现状、Next.js、目录结构、环境变量、部署、最佳实践与常见坑。
TypeScript
React 官方推荐 TypeScript。类型主要落在 Props、事件、Ref 与 Hooks 返回值上。见 组件。
测试
React 组件测试推荐 React Testing Library(RTL):从用户可见行为断言,而非实现细节。运行器常用 Vitest 或 Jest。涵盖安装配置、查询优先级、异步测试、Mock 网络请求、最佳实践与常见坑。
构建与分包
通过代码分割与构建配置减小首屏 JavaScript 体积。涵盖 React.lazy/Suspense、路由级分割、Tree Shaking、Vite 生产构建、体积分析、最佳实践与常见坑。运行时优化见 runtime。
Effect 与副作用
useEffect 用于在组件渲染后执行与外部系统同步的逻辑(请求、订阅、手动改 DOM 等)。涵盖基本用法、依赖数组、适用/不适用场景、useLayoutEffect、最佳实践与常见坑。