@@ -11,8 +11,8 @@ WinJS 框架的 React 渲染器,提供客户端渲染能力和 React Router
1111- 📦 ** TypeScript 支持** - 完整的类型定义
1212- 🎨 ** 应用上下文** - 通过 Context 访问路由和应用数据
1313- ⚡ ** 懒加载** - 内置代码分割和懒加载支持
14- - 🔗 ** 智能预加载 ** - Link 组件支持多种预加载策略
15- - 🌊 ** 流式渲染** - 支持 React 18 的 Suspense 流式渲染
14+ - 🔗 ** 路由预加载 ** - 支持程序化路由预加载
15+ - 🌊 ** 流式渲染** - 支持 React Suspense 流式渲染
1616
1717## 安装
1818
@@ -187,6 +187,19 @@ function UserPage() {
187187
188188> 已废弃,请使用 ` useLoaderData() `
189189
190+ #### ` useRouteData() `
191+
192+ 获取当前路由的上下文数据:
193+
194+ ``` tsx
195+ import { useRouteData } from ' @winner-fed/renderer-react' ;
196+
197+ function MyComponent() {
198+ const { route } = useRouteData ();
199+ return <div >当前路由 ID: { route .id } </div >;
200+ }
201+ ```
202+
190203#### ` useRouteProps() `
191204
192205获取当前路由的属性(不包括 element):
@@ -217,34 +230,16 @@ function Breadcrumb() {
217230
218231#### ` <Link> `
219232
220- 带预加载功能的路由链接组件 :
233+ 路由链接组件(从 react-router 导出) :
221234
222235``` tsx
223236import { Link } from ' @winner-fed/renderer-react' ;
224237
225- // 基础用法
226238<Link to = " /about" >关于我们</Link >
227-
228- // 鼠标悬停时预加载(默认 50ms 延迟)
229- <Link to = " /user" prefetch = " intent" >用户页面</Link >
230-
231- // 渲染时立即预加载
232- <Link to = " /dashboard" prefetch = " render" >控制台</Link >
233-
234- // 进入视口时预加载
235- <Link to = " /products" prefetch = " viewport" >产品列表</Link >
236-
237- // 自定义预加载延迟
238- <Link to = " /settings" prefetch = " intent" prefetchTimeout = { 200 } >设置</Link >
239+ <Link to = " /user/123" >用户页面</Link >
240+ <Link to = " /settings" state = { { from: ' home' }} >设置</Link >
239241```
240242
241- ** 预加载策略:**
242-
243- - ` intent ` - 鼠标悬停时预加载(默认 50ms 延迟)
244- - ` render ` - 组件渲染时立即预加载
245- - ` viewport ` - 链接进入视口时预加载(提前 100px)
246- - ` none ` - 不预加载
247-
248243#### ` withRouter(Component) `
249244
250245为类组件注入路由相关的 props:
@@ -276,7 +271,7 @@ export default withRouter(MyComponent);
276271
277272### React Router 导出
278273
279- 直接从 ` react-router-dom ` 重新导出的常用 API:
274+ 直接从 ` react-router ` 重新导出的常用 API:
280275
281276``` tsx
282277import {
@@ -292,6 +287,7 @@ import {
292287 useRoutes ,
293288
294289 // 组件
290+ Link ,
295291 Navigate ,
296292 NavLink ,
297293 Outlet ,
@@ -588,14 +584,15 @@ function Navigation() {
588584
589585 // 程序化预加载
590586 const handleHover = () => {
591- preloadRoute (' /dashboard' );
587+ if (preloadRoute ) {
588+ preloadRoute (' /dashboard' );
589+ }
592590 };
593591
594592 return (
595593 <nav >
596- { /* 声明式预加载 */ }
597- <Link to = " /home" prefetch = " intent" >首页</Link >
598- <Link to = " /products" prefetch = " viewport" >产品</Link >
594+ <Link to = " /home" >首页</Link >
595+ <Link to = " /products" >产品</Link >
599596
600597 { /* 程序化预加载 */ }
601598 <button onMouseEnter = { handleHover } >控制台</button >
@@ -626,14 +623,14 @@ function Navigation() {
626623- 使用 ` useCallback ` 避免不必要的函数重建
627624- clientLoader 数据全局缓存,避免重复加载
628625- 支持流式渲染(useStream),提升首屏加载速度
629- - 路由预加载支持,减少页面切换延迟
626+ - 通过 preloadRoute 支持程序化路由预加载
630627
631- ## 与其他包的关系
628+ ## 依赖关系
632629
633- - ** @winner-fed/preset-react ** :为 WinJS 提供 React 支持,会自动设置渲染器路径为此包
634- - ** @winner-fed/core ** :通过插件管理器与核心系统集成
635- - ** react-router** :基于 React Router v7 构建,重新导出其核心 API
630+ - ** react** / ** react-dom** :需要 React 19.0.0 或更高版本
631+ - ** react-router** :使用 React Router v7 进行路由管理
636632- ** history** :使用 History v5,支持多种路由模式(Browser/Hash/Memory)
633+ - ** @winner-fed/winjs ** :与 WinJS 插件系统集成
637634
638635## 常见问题
639636
@@ -696,12 +693,20 @@ renderClient({
696693});
697694```
698695
699- ### 5. Link 预加载何时触发?
696+ ### 5. 如何实现路由预加载?
697+
698+ 使用 ` useAppData ` 的 ` preloadRoute ` 方法:
700699
701- - ` intent ` :鼠标悬停 50ms 后触发(可通过 ` prefetchTimeout ` 自定义)
702- - ` render ` :组件挂载时立即触发
703- - ` viewport ` :链接进入视口(提前 100px)时触发
704- - ` none ` :不预加载
700+ ``` tsx
701+ const { preloadRoute } = useAppData ();
702+
703+ // 在鼠标悬停时预加载
704+ const handleHover = () => {
705+ if (preloadRoute ) {
706+ preloadRoute (' /target-path' );
707+ }
708+ };
709+ ```
705710
706711## 许可证
707712
0 commit comments