新書推薦:

《
原来数学还可以这样学
》
售價:NT$
407.0

《
典籍里的中国 第二辑
》
售價:NT$
653.0

《
108种手艺1:中国人的生活美学 王的手创非物质文化遗产的全新再现。以鲜活的一手内容全面展现优秀传统手艺
》
售價:NT$
1010.0

《
宁来一梦
》
售價:NT$
458.0

《
画魂 潘玉良传 潘玉良诞辰130周年精装纪念版
》
售價:NT$
398.0

《
好望角系列丛书·桅杆上的帝国:西班牙史
》
售價:NT$
1010.0

《
启微·清代中国的物价与经济波动
》
售價:NT$
500.0

《
九色鹿·渤海国政治制度研究
》
售價:NT$
504.0
|
編輯推薦: |
编辑推荐
React通过声明式抽象构建Web应用,为开发者提供卓越的开发体验。本书将帮助你深入理解React的核心概念,包括JSX语法及其高级设计模式、虚拟DOM、React协调机制以及性能优化等关键技术。掌握这些知识后,你将能够更加高效地构建高质量的Web 应用。
本书的作者以通俗易懂的语言讲解React的底层原理,摒弃晦涩难懂的术语,让你更轻松地理解其运行机制。通过剖析React的细节和架构,你将掌握灵活操控React代码的能力,从而达到全新的高度。
专家推荐
“Carl Sagan说,‘你必须先了解过去,才能理解当下。’在本书中,Tejas带领我们回顾了React的前世今生,在我看来,这本书正是Tejas在前端领域对这一理念的完美践行,他带领我们回顾React的发展历程,让读者深入理解其历史脉络。
他细致入微地剖析了协调和Fiber等核心概念。如果你渴望深入理解React及其不断演进的生态,那么这本书绝对不容错过。”
——Matheus Albuquerque Brasil
Google Web技术专家
|
內容簡介: |
本书的主要内容有:深入理解React的核心原理和工作机制。学会编写高质量的React应用并掌握持续优化的方法。掌握构建高可用、可扩展React应用的关键技巧。灵活运用React高级功能,例如reducers、state和refs等。
|
關於作者: |
Tejas Kumar自2014年起开始编写React代码,并在多个会议、研讨会和客座讲座中分享相关知识。他在多家初创企业中积累了丰富的技术经验,并对React的核心概念有着深刻的理解。他热衷于React布道,乐于帮助他人掌握React的开发技巧,赋能他们流畅地构建React应用。
|
目錄:
|
目录
序 1
前言 3
第1 章 基础知识 9
1.1 为什么React 会诞生9
1.2 React 诞生之前 10
1.2.1 jQuery 20
1.2.2 Backbone .23
1.2.3 KnockoutJS 30
1.2.4 AngularJS 35
1.3 进入React 时代 .40
1.3.1 React 的价值主张 42
1.3.2 React 的发布 .48
1.3.3 Flux 架构 .49
1.3.4 Flux 架构的优势 .51
1.4 总结:为什么React 如此流行 52
1.5 本章小结53
1.6 回顾问题53
1.7 接下来的内容 .53
第2 章 JSX .55
2.1 JavaScript XML .55
2.2 JSX 的优点 58
2.3 JSX 的缺点 59
2.4 深入解析60
2.4.1 代码是如何工作的 .61
2.4.2 使用JSX 扩展JavaScript 语法 .65
2.5 JSX 编译指示 .67
2.6 表达式 68
2.7 本章小结69
2.8 回顾问题69
2.9 接下来的内容 .69
第3 章 虚拟DOM .71
3.1 虚拟DOM 概述 .71
3.2 真实DOM 73
3.2.1 操作真实DOM 的风险 78
3.2.2 文档片段 .87
3.3 虚拟DOM 的工作原理 89
3.3.1 React 元素 89
3.3.2 虚拟DOM vs 真实DOM 94
3.3.3 高效更新 .97
3.4 本章小结99
3.5 回顾问题.100
3.6 接下来的内容 101
第4 章 深入解析协调过程 103
4.1 理解协调过程 103
4.2 批量更新.106
4.3 先例 107
4.4 Fiber 协调器 . 111
4.4.1 Fiber 数据结构 111
4.4.2 双缓冲 114
4.4.3 Fiber 协调 . 115
4.5 本章小结.122
4.6 回顾问题.122
4.7 接下来的内容 123
第5 章 常见问题与有效的模式 . 125
5.1 使用React.memo 实现记忆化 .125
5.1.1 React.memo .129
5.1.2 记忆化的组件仍会重新渲染 130
5.1.3 这是一种指导原则,而非规则 134
5.2 使用useMemo 进行记忆化140
5.2.1 使用useMemo 的注意事项 .142
5.2.2 “忘记”一切 .150
5.3 懒加载 .150
5.4 useState 与useReducer 157
5.5 强大的设计模式 .164
5.5.1 展示组件/ 容器组件模式 .165
5.5.2 高阶组件 166
5.5.3 Render Props 模式 175
5.5.4 Control Props 模式 177
5.5.5 属性集合模式 .179
5.5.6 组合组件模式 .182
5.5.7 状态Reducer 模式 186
5.6 本章小结.189
5.7 回顾问题.189
5.8 接下来的内容 190
第6 章 服务端渲染 191
6.1 客户端渲染的限制 .191
6.1.1 搜索引擎优化(SEO) .191
6.1.2 性能 .193
6.1.3 安全性 196
6.2 服务端渲染的兴起 .198
6.3 客户端激活(Hydration) .199
6.4 使用服务端渲染 .202
6.4.1 手动为React 应用添加服务端渲染能力 202
6.4.2 客户端激活 .205
6.5 服务端渲染相关的API 205
6.5.1 renderToString 206
6.5.2 renderToPipeableStream 209
6.5.3 renderToReadableStream 222
6.5.4 应用场景 224
6.6 避免重复造轮子 .226
6.7 本章小结.229
6.8 回顾问题.229
6.9 接下来的内容 230
第7 章 React 并发模式 231
7.1 同步渲染的问题 .232
7.2 重新审视Fiber 233
7.3 调度和延迟更新 .233
7.4 深入探讨.237
7.5 渲染通道.242
7.5.1 渲染通道的工作原理244
7.5.2 处理通道 245
7.5.3 提交阶段 246
7.6 useTransition .247
7.6.1 简单示例 247
7.6.2 高级示例:页面导航248
7.6.3 深入探讨 250
7.7 useDeferredValue 251
7.7.1 useDeferredValue 的设计目的 252
7.7.2 什么时候使用useDeferredValue 255
7.7.3 什么时候不适合使用useDeferredValue 256
7.8 并发渲染的问题 .257
7.9 本章小结.267
7.10 回顾问题 268
7.11 接下来的内容 269
第8 章 框架 . 271
8.1 为什么需要框架 .271
8.1.1 服务端渲染 .275
8.1.2 路由 .277
8.1.3 数据获取 278
8.2 使用框架的优势 .283
8.3 使用框架的顾虑 .284
8.4 流行的React 框架 .285
8.4.1 Remix .285
8.4.2 Next.js 295
8.5 如何选择合适的框架 304
8.5.1 明确项目需求 .305
8.5.2 Next.js 305
8.5.3 Remix .306
8.5.4 权衡取舍 307
8.5.5 开发者体验 .308
8.5.6 运行时性能 .308
8.6 本章小结.310
8.7 回顾问题.310
8.8 接下来的内容 311
第9 章 React 服务端组件 313
9.1 服务端组件的优势 .315
9.2 服务端渲染 315
9.2.1 深入剖析 318
9.2.2 处理组件更新 .329
9.2.3 细节剖析 335
9.3 服务端组件的使用准则 337
9.3.1 序列化是关键 .337
9.3.2 避免使用具有副作用的Hooks 337
9.3.3 服务端状态≠客户端状态 338
9.3.4 客户端组件不能引用服务端组件 .338
9.3.5 客户端组件尚未过时340
.4 服务端操作 340
9.4.1 表单与数据变更 341
9.4.2 非表单场景 .341
9.5 展望React 服务端组件的未来 .342
9.6 本章小结.343
9.7 回顾问题.344
9.8 接下来的内容 344
第10 章 React 的竞品 . 347
10.1 Vue.js .347
10.1.1 信号 349
10.1.2 易于上手 350
10.2 Angular .350
10.2.1 变更检测 351
10.2.2 信号 351
10.3 Svelte .352
10.4 Solid 357
10.5 Qwik 359
10.6 共性的设计模式 361
10.6.1 基于组件的构架设计 361
10.6.2 声明式语法361
10.6.3 响应状态更新 362
10.6.4 生命周期方法 362
10.6.5 社区和工具362
10.7 React 并非真正的响应式框架 363
10.8 React 的未来 368
10.9 本章小结 372
10.10 回顾问题 373
10.11 接下来的内容 .374
第11 章 总结 375
11.1 要点总结 375
11.2 我们的时间线 378
11.3 “魔法”背后的机制 .378
11.4 深入探索的旅程 379
11.5 保持更新 380
|
內容試閱:
|
前言本书并不适用想要学习如何使用React 的读者。如果你对React 还不熟悉,并希望找到一份入门教程,可以从react.dev 上的React 官方文档开始。相反,本书是为那些由好奇心驱使的人而写,他们并不满足于了解如何使用React,而是更想弄清楚React 的工作原理。在本书中,我们将深入探讨多个React 的核心概念,理解其底层机制,并探索这些机制是如何协同工作的,使我们能够更加高效地开发React 应用。通过探究React 的内部原理,我们将建立一套清晰的思维模型,使我们能够更加准确地理解React 及其生态系统。本书假设读者已经具备以下基础知识:浏览器渲染网页的基本原理。网页是由CSS 样式化的HTML 文档,并通过JavaScript 实现交互性。此外,本书还假设读者对React 有一定的了解,并且曾经开发过一两个React 应用,最好其中一些应用已经投入生产环境使用。我们将从React 的概述及其发展历史入手,回顾2013 年它以开源软件的形式首次发布的背景。随后,我们将深入剖析React 的核心概念,包括组件模型、虚拟DOM 和协调(reconciliation)机制。接着,我们会探讨JSX 的编译原理,并深入解析React 的Fiber 架构,理解其并发编程模型。通过这些内容,我们将掌握一些关键技巧,比如更高效地进行记忆化,以及使用诸如React.memo和useTransition 这样的强大原语,延迟渲染不必要的计算任务。本书的后半部分,我们将深入探讨React 框架:了解它们所要解决的问题,以及它们是如何解决这些问题的。为了更好地理解这些机制。我们将亲手编写一个框架,聚焦于Web 应用绕不开的三个关键问题:服务端渲染、路由和数据获取。当亲手解决了这些问题后,我们会更加直观和透彻地感受现有框架解决它们的思路。此外,我们还将深入研究React 服务端组件(RSC)和服务端操作(server actions),并探讨下一代前端工具链,例如打包工具(bundlers)和同构路由(isomorphic routers)等。最后,我们将视角从React 拓展到更广阔的前端生态,探讨Vue、Solid、Angular、Qwik 等竞品。我们将重点探索信号(Signal)及其细粒度响应式(fine-grained reactivity),并和React 更粗粒度的响应式模型进行对比。此外,我们还会探讨React 对信号机制的回应:Forget 工具链,以及它在与信号机制对比中的表现。本书内容丰富,值得深入探究,所以不浪费时间了,让我们开始吧!本书中的约定本书采用以下排版约定:斜体(Italic)用于表示新术语、网址(URL)、电子邮件地址、文件名和文件扩展名。等宽字体(Constant width)用于代码示例,以及在正文中引用的程序元素,例如变量、函数名、数据库名称、数据类型、环境变量、语句和关键字等。等宽加粗字体和浅灰色文本(Constant width bold and light gray text)仅用于印刷版第10 章,用于在代码块中突出代码差异。O’Reilly 在线学习平台(O’Reilly Online Learning)近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司本书有专门的网页,其中列出了勘误信息、示例代码及其他相关资料,可以访问以下链接获取更多信息:https://oreil.ly/fluent-react。对本书中文版的有任何建议可以发电子邮件到errata@oreilly.com.cn。欲了解本社图书和课程的新闻和信息,请访问我们的网站http://oreilly.com。我们的Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的YouTube:https://youtube.com/oreillymedia。致谢这是我人生中撰写的第一本书,而我并非孤军奋战,对此我无比感激。你即将阅读的内容,凝聚了许多才华横溢之人的智慧和努力。正是他们的付出,才让这本书得以问世。在此,我衷心感谢他们为本书所做出的贡献。请不要跳过这一部分,因为这些人值得你的关注和感激。首先,我要感谢直接帮助我完成本书的人:? 首先要感谢我的妻子Lea。写这本书占据了我大量时间,牺牲了本该与家人共度的时光。由于我对这个主题充满热情,并希望将其分享给大家,这本书甚至占用了部分假期和原本可以与妻子相处的机会。然而,Lea 始终给予我无限的支持和鼓励,我对此满怀感激。? 本书的开发编辑Shira Evans,来自O’Reilly 的Shira 是一位非常棒的合作伙伴,她始终支持、鼓励并理解我,即使在面对诸多延误时仍不放弃。由于React 生态持续演进,例如Forget 和服务端操作的引入,我们需要不断调整内容,而Shira 始终耐心陪伴、支持着我。对此,我感激不尽。? 我的良师益友Kent C. Dodds(@kentcdodds),他不仅在本书之外给予我长期的指导,还为本书撰写了序言。多年来,Kent 一直是我值得信赖的朋友和导师,我由衷感谢他一直以来的支持和鼓励。? 审阅团队。如果没有这些审阅人员的细致入微与专业精神,这本书绝不可能完成。他们与我并肩作战,倾注了大量心血,我在此深表谢意:─ Adam Rackis (@adamrackis)─ Daniel Afonso (@danieljcafonso)─ Fabien Bernard (@fabien0102)─ Kent C. Dodds (@kentcdodds)─ Mark Erikson (@acemarke)─ Lenz Weber-Tronic (@phry)─ Rick Hanlon II (@rickhanlonii)─ Sergeii Kirianov (@SergiiKirianov)─ Matheus Albuquerque (@ythecombinator)? Meta(原Facebook)的React 团队,感谢他们不懈推动React 的发展,不断突破技术边界,以卓越的工程能力和创新思维,让React 变得更加强大且易用。特别感谢Dan Abramov(@dan_abramov),他不仅耐心向我讲解了打包工具在React 服务端组件架构中的作用,还贡献了第9 章关于React服务端组件的重要内容。最后,我要感谢你,作为读者,愿意阅读这本书并对其内容产生兴趣。我希望你在阅读过程中收获满满,就像我在写作这本书时所感受到的喜悦与成长。
|
|