` 挂一个 chitu `PageMaster`,布局外壳始终挂载,只有子页面切换显隐。
- **干净的 URL**:地址栏就是 `/admin/users` 这类 pathname,不会被改写成 chitu 的 pageName 形式;一次导航 = 一条 history 记录。
- **页面级缓存与卸载**:chitu 按路由缓存页面(`display:none` 切换),页面关闭时自动 `root.unmount()` 清理副作用。
- **路径模板与 node-shop-v2 同源**:底层用 `path-to-regexp`(express 风格),支持 `:id`、花括号可选段 `{/:page}`、`/:page.css`、`{*splat}` 通配等。
- **单一产物**:整个包只有一份实现(`dist/index.*`),不存在多入口各带一份 context 的隐患。
## 安装
```bash
npm install maishu-chitu-react maishu-chitu react react-dom
```
> `maishu-chitu`(`>=5.0.0`)、`react` / `react-dom`(`>=18.3`)为对等依赖。
> 兼容层本身不依赖 `maishu-chitu` 的 `Application`,只使用 `PageMaster`。
## 接入
```ts
// 直接用包名,不再需要 react-router / react-router-dom
import { BrowserRouter, Routes, Route, Outlet, Link, NavLink } from 'maishu-chitu-react';
```
旧项目迁移时把说明符批量替换即可(`from "react-router"` / `from "react-router-dom"` → `from "maishu-chitu-react"`)。
用 importmap 的项目只需映射 `maishu-chitu-react` 与 `maishu-chitu` 两项。
> `.`、`./react-router`、`./react-router-dom` 三个入口都指向**同一份** `dist/index.*`,
> 混用也不会出现「两份 React context」的问题(因此 `maishu-chitu-react/react-router` 这类旧写法仍可用)。
## 用法
```tsx
import {
BrowserRouter, Routes, Route, Outlet,
Link, NavLink,
useParams, useLocation, useNavigate, useSearchParams,
generatePath,
} from 'maishu-chitu-react';
function Layout() {
return (
首页
商品
{/* 子路由渲染在这里 —— 布局本身不会被重新挂载 */}
);
}
createRoot(document.getElementById('root')!).render(
}>
} />
} />
} />
}>
} />
} />