书籍详情
深入理解React Router:从原理到实践
作者:李杨韬 著
出版社:电子工业出版社
出版时间:2021-03-01
ISBN:9787121406089
定价:¥89.00
购买这本书可以去
内容简介
本书从基础内容出发,详细梳理了浏览器的基础导航能力、history库的使用及原理,以及React Hooks等基础知识,帮助读者学习并掌握React Router的前驱知识。同时,本书从React Router的发展历程、技术演变出发,介绍了React Router的设计思路,并通过路由器、路由端口、导航三要素,引出React Router的基本使用方法,并对源码进行了全面解析。此外,本书各章使用React Hooks穿插了30余个案例,在兼顾实用性、可扩展性的同时,为读者学习与理解React Router提供了全面丰富的素材。通过阅读本书,读者不仅可以融会贯通地掌握React Router,而且能提升对前端路由的认识,并掌握前端领域路由的设计思路与方法。本书适合有JavaScript或TypeScript基础,想要学习使用React Router,或对React Router实现原理和工程实践感兴趣的开发者阅读。
作者简介
李杨韬,一线前端工程师,硕士毕业于东南大学,目前在美团点评工作,专注于Web开发,拥有多年工程经验,参与过众多大型Web项目的设计,开发,同时也喜爱探索Web前沿技术。
目录
第1章 导航相关JavaScript前驱知识\t1
1.1 URI和URL\t1
1.1.1 URI和URL简介\t1
1.1.2 浏览器URI编码\t3
1.2 浏览器记录\t4
1.2.1 history.pushState\t5
1.2.2 history.replaceState\t9
1.2.3 通过相对路径添加和修改浏览器记录\t11
1.2.4 在base元素存在的情况下添加和修改浏览器记录\t14
1.3 在浏览器中跳转\t15
1.3.1 window.history.go\t15
1.3.2 window.history.forward\t16
1.3.3 window.history.back\t16
1.3.4 window.location.href\t17
1.3.5 window.location.hash\t17
1.3.6 window.location.replace\t18
1.4 浏览器相关事件介绍\t19
1.4.1 popstate事件\t19
1.4.2 hashchange事件\t21
1.4.3 手动触发事件\t22
1.5 小结\t24
参考文献\t24
第2章 history库详解\t26
2.1 history库概述\t26
2.2 browserHistory\t32
2.2.1 创建browserHistory\t32
2.2.2 history导航\t33
2.2.3 history监听\t37
2.3 hashHisotry\t38
2.3.1 创建hashHisotry\t38
2.3.2 history导航\t40
2.3.3 history监听\t45
2.3.4 history.createHref\t47
2.4 memoryHistory\t49
2.4.1 创建memoryHistory\t49
2.4.2 history导航\t50
2.4.3 history监听\t53
2.5 history库原理\t54
2.5.1 history库的运行流程\t54
2.5.2 history模拟历史栈\t55
2.5.3 browserHistory事件处理\t57
2.5.4 hashHistory事件处理\t58
2.5.5 history.block原理解析\t60
2.6 history库限制\t63
2.6.1 history.block的使用限制\t63
2.6.2 decodeURI解码问题\t64
2.7 使用history替换页面search和hash示例\t70
2.8 小结\t71
参考文献\t71
第3章 React相关知识\t72
3.1 Context\t72
3.2 Hooks\t76
3.2.1 useState\t76
3.2.2 useEffect\t78
3.2.3 useLayoutEffect\t84
3.2.4 useRef\t86
3.2.5 useMemo\t87
3.2.6 useContext\t89
3.2.7 自定义Hook\t89
3.3 Refs\t90
3.3.1 createRef\t90
3.3.2 forwardRef\t91
3.4 Memo\t91
3.5 小结\t94
参考文献\t94
第4章 认识React Router\t95
4.1 React Router是什么\t95
4.2 React Router版本的演进\t96
4.3 静态路由与动态路由\t97
4.4 使用React Router实现一个工程应用\t98
4.5 小结\t107
第5章 Router\t109
5.1 Router是什么\t109
5.2 Router源码解析\t110
5.2.1 history监听\t110
5.2.2 提供初始Context\t110
5.2.3 提前监听\t113
5.3 BrowserRouter\t113
5.4 HashRouter\t114
5.5 NativeRouter\t115
5.6 StaticRouter\t116
5.7 相关Hooks\t121
5.7.1 useRouterContext\t122
5.7.2 useHistory\t122
5.7.3 useLocation\t123
5.8 小结\t124
参考文献\t124
第6章 Route\t125
6.1 Route是什么\t125
6.2 Route的两个基本要素\t125
6.2.1 Route的第一个要素:path\t126
6.2.2 Route的第二个要素:组件渲染方式\t134
6.3 Route传入组件的3个参数\t138
6.3.1 match\t138
6.3.2 location\t140
6.3.3 history\t141
6.4 Route的其他配置\t142
6.4.1 location\t142
6.4.2 exact\t142
6.4.3 strict\t143
6.4.4 sensitive\t144
6.5 Route 源码解析\t144
6.5.1 上下文的更新\t144
6.5.2 运行流程\t147
6.6 相关Hooks\t149
6.6.1 useRouteMatch\t149
6.6.2 useParams\t149
6.7 Route实战案例\t150
6.7.1 嵌套Route\t150
6.7.2 相对路径Route\t152
6.7.3 重定向Route\t153
6.7.4 默认子组件Route\t156
6.7.5 缓存Route\t158
6.7.6 Route渲染组件的可访问性支持\t165
6.7.7 query及命名参数\t166
6.7.8 Route中的代码拆分\t168
6.8 小结\t169
参考文献\t170
第7章 Link\t171
7.1 Link介绍\t171
7.1.1 Link的定义及属性\t171
7.1.2 Link源码解析\t174
7.2 NavLink\t176
7.2.1 带激活态的Link\t176
7.2.2 转义特殊字符\t178
7.2.3 NavLink源码解析\t178
7.3 DeepLinking\t181
7.4 BackButton\t182
7.5 导航实战案例\t183
7.5.1 为导航组件扩展路由匹配\t183
7.5.2 相对上下文路径导航组件\t184
7.5.3 相对上下文路径的导航方法\t185
7.5.4 为导航组件扩展search和hash支持\t188
7.6 小结\t191
参考文献\t191
第8章 其他路由组件及方法\t192
8.1 Switch\t192
8.1.1 Switch简介\t192
8.1.2 Switch源码解析\t194
8.2 Redirect\t196
8.2.1 基本跳转\t196
8.2.2 条件跳转\t197
8.2.3 源码解析\t198
8.3 Prompt\t201
8.4 withRouter\t203
8.5 matchPath\t205
8.6 实战案例\t206
8.6.1 路由动画\t206
8.6.2 Prompt组件\t210
8.6.3 404页面\t212
8.6.4 不销毁未命中路径组件的扩展Switch\t215
8.7 小结\t218
参考文献\t219
第9章 进阶实战案例\t220
9.1 路由组件的滚动恢复\t220
9.1.1 scrollRestoration\t220
9.1.2 容器元素滚动恢复\t221
9.1.3 滚动管理者ScrollManager\t221
9.1.4 滚动恢复执行者ScrollElement\t224
9.1.5 多次尝试机制\t227
9.2 异步history方法\t229
9.2.1 提升history方法\t229
9.2.2 导航感知\t231
9.3 为路由引入hash定位\t233
9.3.1 页面加载\t233
9.3.2 异步数据加载\t235
9.4 为组件引入路由生命周期\t237
9.4.1 路由生命周期\t237
9.4.2 实现路由生命周期高阶组件\t241
9.5 React Router状态同步Redux\t246
9.5.1 接入connected-react-router\t246
9.5.2 connected-react-router原理分析\t249
9.6 React Router状态同步Mobx\t251
9.7 路由与组件的结合实战\t252
9.7.1 路由结合Tabs组件\t252
9.7.2 路由结合Modal组件\t256
9.7.3 路由结合BreadCrumb组件\t257
9.8 为history方法引入前置中间件\t260
9.8.1 Redux中间件\t260
9.8.2 中间件定义\t261
9.8.3 实现history中间件\t263
9.9 组件路由化\t268
9.9.1 为组件加入path属性\t268
9.9.2 为组件赋予路由\t269
9.10 路由与页签机制\t274
9.10.1 页签介绍\t274
9.10.2 页签配置\t276
9.10.3 页签实现\t277
9.11 在React Hooks中使用路由\t282
9.11.1 通过React Hooks获得路由组件\t282
9.11.2 实现useHookRoutes\t284
9.12 微服务路由\t286
9.12.1 微服务介绍\t286
9.12.2 实现示例\t287
9.13 配置化路由扩展\t294
9.13.1 配置化路由与react-router-config\t294
9.13.2 重新实现配置化路由\t298
9.14 配置化路由综合示例\t303
9.14.1 路由配置\t304
9.14.2 导航\t310
9.14.3 使用页签组件\t318
9.14.4 页签栈维护\t325
9.15 小结\t335
参考文献\t336
附录A 从React Router v3.x迁移到React Router v4.x及以上版本\t337
1.1 URI和URL\t1
1.1.1 URI和URL简介\t1
1.1.2 浏览器URI编码\t3
1.2 浏览器记录\t4
1.2.1 history.pushState\t5
1.2.2 history.replaceState\t9
1.2.3 通过相对路径添加和修改浏览器记录\t11
1.2.4 在base元素存在的情况下添加和修改浏览器记录\t14
1.3 在浏览器中跳转\t15
1.3.1 window.history.go\t15
1.3.2 window.history.forward\t16
1.3.3 window.history.back\t16
1.3.4 window.location.href\t17
1.3.5 window.location.hash\t17
1.3.6 window.location.replace\t18
1.4 浏览器相关事件介绍\t19
1.4.1 popstate事件\t19
1.4.2 hashchange事件\t21
1.4.3 手动触发事件\t22
1.5 小结\t24
参考文献\t24
第2章 history库详解\t26
2.1 history库概述\t26
2.2 browserHistory\t32
2.2.1 创建browserHistory\t32
2.2.2 history导航\t33
2.2.3 history监听\t37
2.3 hashHisotry\t38
2.3.1 创建hashHisotry\t38
2.3.2 history导航\t40
2.3.3 history监听\t45
2.3.4 history.createHref\t47
2.4 memoryHistory\t49
2.4.1 创建memoryHistory\t49
2.4.2 history导航\t50
2.4.3 history监听\t53
2.5 history库原理\t54
2.5.1 history库的运行流程\t54
2.5.2 history模拟历史栈\t55
2.5.3 browserHistory事件处理\t57
2.5.4 hashHistory事件处理\t58
2.5.5 history.block原理解析\t60
2.6 history库限制\t63
2.6.1 history.block的使用限制\t63
2.6.2 decodeURI解码问题\t64
2.7 使用history替换页面search和hash示例\t70
2.8 小结\t71
参考文献\t71
第3章 React相关知识\t72
3.1 Context\t72
3.2 Hooks\t76
3.2.1 useState\t76
3.2.2 useEffect\t78
3.2.3 useLayoutEffect\t84
3.2.4 useRef\t86
3.2.5 useMemo\t87
3.2.6 useContext\t89
3.2.7 自定义Hook\t89
3.3 Refs\t90
3.3.1 createRef\t90
3.3.2 forwardRef\t91
3.4 Memo\t91
3.5 小结\t94
参考文献\t94
第4章 认识React Router\t95
4.1 React Router是什么\t95
4.2 React Router版本的演进\t96
4.3 静态路由与动态路由\t97
4.4 使用React Router实现一个工程应用\t98
4.5 小结\t107
第5章 Router\t109
5.1 Router是什么\t109
5.2 Router源码解析\t110
5.2.1 history监听\t110
5.2.2 提供初始Context\t110
5.2.3 提前监听\t113
5.3 BrowserRouter\t113
5.4 HashRouter\t114
5.5 NativeRouter\t115
5.6 StaticRouter\t116
5.7 相关Hooks\t121
5.7.1 useRouterContext\t122
5.7.2 useHistory\t122
5.7.3 useLocation\t123
5.8 小结\t124
参考文献\t124
第6章 Route\t125
6.1 Route是什么\t125
6.2 Route的两个基本要素\t125
6.2.1 Route的第一个要素:path\t126
6.2.2 Route的第二个要素:组件渲染方式\t134
6.3 Route传入组件的3个参数\t138
6.3.1 match\t138
6.3.2 location\t140
6.3.3 history\t141
6.4 Route的其他配置\t142
6.4.1 location\t142
6.4.2 exact\t142
6.4.3 strict\t143
6.4.4 sensitive\t144
6.5 Route 源码解析\t144
6.5.1 上下文的更新\t144
6.5.2 运行流程\t147
6.6 相关Hooks\t149
6.6.1 useRouteMatch\t149
6.6.2 useParams\t149
6.7 Route实战案例\t150
6.7.1 嵌套Route\t150
6.7.2 相对路径Route\t152
6.7.3 重定向Route\t153
6.7.4 默认子组件Route\t156
6.7.5 缓存Route\t158
6.7.6 Route渲染组件的可访问性支持\t165
6.7.7 query及命名参数\t166
6.7.8 Route中的代码拆分\t168
6.8 小结\t169
参考文献\t170
第7章 Link\t171
7.1 Link介绍\t171
7.1.1 Link的定义及属性\t171
7.1.2 Link源码解析\t174
7.2 NavLink\t176
7.2.1 带激活态的Link\t176
7.2.2 转义特殊字符\t178
7.2.3 NavLink源码解析\t178
7.3 DeepLinking\t181
7.4 BackButton\t182
7.5 导航实战案例\t183
7.5.1 为导航组件扩展路由匹配\t183
7.5.2 相对上下文路径导航组件\t184
7.5.3 相对上下文路径的导航方法\t185
7.5.4 为导航组件扩展search和hash支持\t188
7.6 小结\t191
参考文献\t191
第8章 其他路由组件及方法\t192
8.1 Switch\t192
8.1.1 Switch简介\t192
8.1.2 Switch源码解析\t194
8.2 Redirect\t196
8.2.1 基本跳转\t196
8.2.2 条件跳转\t197
8.2.3 源码解析\t198
8.3 Prompt\t201
8.4 withRouter\t203
8.5 matchPath\t205
8.6 实战案例\t206
8.6.1 路由动画\t206
8.6.2 Prompt组件\t210
8.6.3 404页面\t212
8.6.4 不销毁未命中路径组件的扩展Switch\t215
8.7 小结\t218
参考文献\t219
第9章 进阶实战案例\t220
9.1 路由组件的滚动恢复\t220
9.1.1 scrollRestoration\t220
9.1.2 容器元素滚动恢复\t221
9.1.3 滚动管理者ScrollManager\t221
9.1.4 滚动恢复执行者ScrollElement\t224
9.1.5 多次尝试机制\t227
9.2 异步history方法\t229
9.2.1 提升history方法\t229
9.2.2 导航感知\t231
9.3 为路由引入hash定位\t233
9.3.1 页面加载\t233
9.3.2 异步数据加载\t235
9.4 为组件引入路由生命周期\t237
9.4.1 路由生命周期\t237
9.4.2 实现路由生命周期高阶组件\t241
9.5 React Router状态同步Redux\t246
9.5.1 接入connected-react-router\t246
9.5.2 connected-react-router原理分析\t249
9.6 React Router状态同步Mobx\t251
9.7 路由与组件的结合实战\t252
9.7.1 路由结合Tabs组件\t252
9.7.2 路由结合Modal组件\t256
9.7.3 路由结合BreadCrumb组件\t257
9.8 为history方法引入前置中间件\t260
9.8.1 Redux中间件\t260
9.8.2 中间件定义\t261
9.8.3 实现history中间件\t263
9.9 组件路由化\t268
9.9.1 为组件加入path属性\t268
9.9.2 为组件赋予路由\t269
9.10 路由与页签机制\t274
9.10.1 页签介绍\t274
9.10.2 页签配置\t276
9.10.3 页签实现\t277
9.11 在React Hooks中使用路由\t282
9.11.1 通过React Hooks获得路由组件\t282
9.11.2 实现useHookRoutes\t284
9.12 微服务路由\t286
9.12.1 微服务介绍\t286
9.12.2 实现示例\t287
9.13 配置化路由扩展\t294
9.13.1 配置化路由与react-router-config\t294
9.13.2 重新实现配置化路由\t298
9.14 配置化路由综合示例\t303
9.14.1 路由配置\t304
9.14.2 导航\t310
9.14.3 使用页签组件\t318
9.14.4 页签栈维护\t325
9.15 小结\t335
参考文献\t336
附录A 从React Router v3.x迁移到React Router v4.x及以上版本\t337
猜您喜欢