本书作者是资深开发人员,有过多年的开发经验,总结了自己使用React和Redux的实战经验,系统分析React和Redux结合的优势,与开发技巧,为开发大型系统提供参考。主要内容包括:React的基础知识、如何设计易于维护的React组件、如何使用Redux控制数据流、React和Redux的相结合的方式、同构的React和Redux架构、React和Redux的性能优化、组件的测试等。
......(更多)
程墨 资深架构师,曾任职于摩托罗拉、雅虎和微软,云鸟配送平台联合创始人,目前服务于美国视频服务公司Hulu
......(更多)
前言
第1章 React新的前端思维方式1
1.1 初始化一个React项目1
1.2 增加一个新的React组件3
1.2.1 JSX6
1.2.2 JSX是进步还是倒退7
1.3 分解React应用8
1.4 React的工作方式10
1.4.1 jQuery如何工作10
1.4.2 React的理念11
1.4.3 Virtual DOM12
1.4.4 React工作方式的优点13
1.5 本章小结14
第2章 设计高质量的React组件16
2.1 易于维护组件的设计要素16
2.2 React组件的数据17
2.2.1 React的prop18
2.2.2 React的state22
2.2.3 prop和state的对比24
2.3 组件的生命周期25
2.3.1 装载过程25
2.3.2 更新过程30
2.3.3 卸载过程34
2.4 组件向外传递数据34
2.5 React组件state和prop的局限37
2.6 本章小结39
第3章 从Flux到Redux40
3.1 Flux40
3.1.1 MVC框架的缺陷41
3.1.2 Flux应用43
3.1.3 Flux的优势53
3.1.4 Flux的不足54
3.2 Redux56
3.2.1 Redux的基本原则56
3.2.2 Redux实例59
3.2.3 容器组件和傻瓜组件64
3.2.4 组件Context67
3.2.5 React-Redux71
3.3 本章小结73
第4章 模块化React和Redux应用75
4.1 模块化应用要点75
4.2 代码文件的组织方式76
4.2.1 按角色组织76
4.2.2 按功能组织78
4.3 模块接口79
4.4 状态树的设计81
4.4.1 一个状态节点只属于一个模块82
4.4.2 避免冗余数据82
4.4.3 树形结构扁平83
4.5 Todo应用实例83
4.5.1 Todo状态设计84
4.5.2 action构造函数86
4.5.3 组合reducer87
4.5.4 Todo视图90
4.5.5 样式 98
4.5.6 不使用ref99
4.6 开发辅助工具100
4.6.1 Chrome扩展包100
4.6.2 redux-immutable-state-invariant辅助包101
4.6.3 工具应用101
4.7 本章小结103
第5章 React组件的性能优化105
5.1 单个React组件的性能优化105
5.1.1 发现浪费的渲染时间106
5.1.2 性能优化的时机107
5.1.3 React-Redux的should-ComponentUpdate实现108
5.2 多个React组件的性能优化115
5.2.1 React的调和(Reconciliation)过程116
5.2.2 Key的用法120
5.3 用reselect提高数据获取性能122
5.3.1 两阶段选择过程123
5.3.2 范式化状态树125
5.4 本章小结127
第6章 React高级组件129
6.1 高阶组件129
6.1.1 代理方式的高阶组件132
6.1.2 继承方式的高阶组件136
6.1.3 高阶组件的显示名139
6.1.4 曾经的React Mixin139
6.2 以函数为子组件140
6.2.1 实例CountDown142
6.2.2 性能优化问题145
6.3 本章小结146
第7章 Redux和服务器通信147
7.1 React组件访问服务器147
7.1.1 代理功能访问API148
7.1.2 React组件访问服务器的生命周期150
7.1.3 React组件访问服务器的优缺点153
7.2 Redux访问服务器154
7.2.1 redux-thunk中间件154
7.2.2 异步action对象 156
7.2.3 异步操作的模式157
7.2.4 异步操作的中止 163
7.3 Redux异步操作的其他方法165
7.3.1 如何挑选异步操作方式165
7.3.2 利用Promise实现异步操作167
7.4 本章小结 167
第8章 单元测试168
8.1 单元测试的原则168
8.2 单元测试环境搭建170
8.2.1 单元测试框架170
8.2.2 单元测试代码组织172
8.2.3 辅助工具173
8.3 单元测试实例175
8.3.1 action构造函数测试175
8.3.2 异步action构造函数测试176
8.3.3 reducer测试178
8.3.4 无状态React组件测试178
8.3.5 被连接的React组件测试179
8.4 本章小结180
第9章 扩展Redux182
9.2 中间件182
9.1.1 中间件接口183
9.1.2 使用中间件186
9.1.3 Promise中间件187
9.1.4 中间件开发原则190
9.2 Store Enhancer 191
9.2.1 增强器接口191
9.2.2 增强器实例reset192
9.3 本章小结194
第10章 动画195
10.1 动画的实现方式195
10.1.1 CSS3方式195
10.1.2 脚本方式197
10.2 ReactCSSTransitionGroup199
10.2.1 Todo应用动画200
10.2.2 ReactCSSTransitionGroup规则202
10.3 React-Motion动画库205
10.3.1 React-Motion的设计原则205
10.3.2 Todo应用动画206
10.4 本章小结210
第11章 多页面应用211
11.1 单页应用211
11.2 React-Router213
11.2.1 路由213
11.2.2 路由链接和嵌套216
11.2.3 默认链接218
11.2.4 集成Redux219
11.3 代码分片221
11.3.1 弹射和配置webpack224
11.3.2 动态加载分片225
11.3.3 动态更新Store的reducer和状态228
11.4 本章小结234
第12章 同构235
12.1 服务器端渲染vs浏览器端渲染235
12.2 构建渲染动态内容服务器239
12.2.1 设置Node.js和Express240
12.2.2 热加载242
12.3 React同构246
12.3.1 React服务器端渲染HTML247
12.3.2 脱水和注水248
12.3.3 服务器端Redux Store249
12.3.4 支持服务器和浏览器获取共同数据源250
12.3.5 服务器端路由251
12.4 同构实例252
12.5 本章小结257
结语258
......(更多)
类似上面的代码,在 jsx 用直接把匿名函数赋值给 onClick 的方法,看起来非常简洁而且方便,其实并不是值得提倡的方法。因为每次渲染都会创造一个新的匿名方法对象,而且有可能引发子组件不必要的重新渲染
......(更多)