第1章 React新的前端思维方式 1
1.1 初始化一个React项目 1
1.2 增加一个新的React组件 3
1.2.1 JSX 6
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 DOM 12
1.4.4 React工作方式的优点 13
1.5 本章小结 14
第2章 设计高质量的React组件 16
2.1 易于维护组件的设计要素 16
2.2 React组件的数据 17
2.2.1 React的prop 18
2.2.2 React的state 22
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到Redux 40
3.1 Flux 40
3.1.1 MVC框架的缺陷 41
3.1.2 Flux应用 43
3.1.3 Flux的优势 53
3.1.4 Flux的不足 54
3.2 Redux 56
3.2.1 Redux的基本原则 56
3.2.2 Redux实例 59
3.2.3 容器组件和傻瓜组件 64
3.2.4 组件Context 67
3.2.5 React-Redux 71
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 组合reducer 87
4.5.4 Todo视图 90
4.5.5 样式 98
4.5.6 不使用ref 99
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 Mixin 139
6.2 以函数为子组件 140
6.2.1 实例CountDown 142
6.2.2 性能优化问题 145
6.3 本章小结 146
第7章 Redux和服务器通信 147
7.1 React组件访问服务器 147
7.1.1 代理功能访问API 148
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章 扩展Redux 182
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 增强器实例reset 192
9.3 本章小结 194
第10章 动画 195
10.1 动画的实现方式 195
10.1.1 CSS3方式 195
10.1.2 脚本方式 197
10.2 ReactCSSTransitionGroup 199
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-Router 213
11.2.1 路由 213
11.2.2 路由链接和嵌套 216
11.2.3 默认链接 218
11.2.4 集成Redux 219
11.3 代码分片 221
11.3.1 弹射和配置webpack 224
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和Express 240
12.2.2 热加载 242
12.3 React同构 246
12.3.1 React服务器端渲染HTML 247
12.3.2 脱水和注水 248
12.3.3 服务器端Redux Store 249
12.3.4 支持服务器和浏览器获取共同数据源 250
12.3.5 服务器端路由 251
12.4 同构实例 252
12.5 本章小结 257
结语 258