深入React 技术栈 pdf

深入React 技术栈

内容简介

本书从几个维度去介绍 React。一是作为 View 库,它怎么实现组件化,以及它背后的实现原理。二是扩展到 Flux 应用架构及重要的衍生品 Redux,它们怎么与 React 结合做应用开发。三是对 React 与 server 的碰撞产生的一些思考。四是讲述它在可视化方面的优势与劣势。

本书适合有一定经验的前端开发人员阅读。

作者简介

陈屹,前端架构师,就职于阿里巴巴。热衷开源事业,长年专注于前端架构、数据可视化、Node.js等领域,知乎专栏pure render的创办人。

目录

第1章 初入 React 世界 1
1.1 React 简介 1
1.1.1 专注视图层 1
1.1.2 Virtual DOM 1
1.1.3 函数式编程 2
1.2 JSX 语法 3
1.2.1 JSX 的由来 3
1.2.2 JSX 基本语法 7
1.3 React 组件 11
1.3.1 组件的演变 11
1.3.2 React 组件的构建 18
1.4 React 数据流 21
1.4.1 state 21
1.4.2 props 23
1.5 React 生命周期 29
1.5.1 挂载或卸载过程 29
1.5.2 数据更新过程 30
1.5.3 整体流程 33
1.6 React 与 DOM 34
1.6.1 ReactDOM 35
1.6.2 ReactDOM 的不稳定方法 36
1.6.3 refs 38
1.6.4 React 之外的 DOM 操作 40
1.7 组件化实例:Tabs 组件 41
1.8 小结 47
第2章 漫淡 React 48
2.1 事件系统 48
2.1.1 合成事件的绑定方式 48
2.1.2 合成事件的实现机制 49
2.1.3 在React中使用原生事件 51
2.1.4 合成事件与原生事件混用 51
2.1.5 对比React合成事件与JavaScript原生事件 54
2.2 表单 55
2.2.1 应用表单组件 55
2.2.2 受控组件 60
2.2.3 非受控组件 61
2.2.4 对比受控组件和非受控组件 62
2.2.5 表单组件的几个重要属性 63
2.3 样式处理 64
2.3.1 基本样式设置 64
2.3.2 CSS Modules 66
2.4 组件间通信 74
2.4.1 父组件向子组件通信 74
2.4.2 子组件向父组件通信 75
2.4.3 跨级组件通信 77
2.4.4 没有嵌套关系的组件通信 79
2.5 组件间抽象 81
2.5.1 mixin 81
2.5.2 高阶组件 86
2.5.3 组合式组件开发实践 93
2.6 组件性能优化 97
2.6.1 纯函数 97
2.6.2 PureRender 100
2.6.3 Immutable 103
2.6.4 key 109
2.6.5 react-addons-perf 110
2.7 动画 111
2.7.1 CSS 动画与 JavaScript 动画 111
2.7.2 玩转 React Transition 113
2.7.3 缓动函数 116
2.8 自动化测试 121
2.8.1 Jest 121
2.8.2 Enzyme 124
2.8.3 自动化测试 125
2.9 组件化实例:优化 Tabs 组件 125
2.10 小结 133
第3章 解读 React 源码 134
3.1 初探 React 源码 134
3.2 Virtual DOM 模型 137
3.2.1 创建 React 元素 138
3.2.2 初始化组件入口 140
3.2.3 文本组件 141
3.2.4 DOM 标签组件 144
3.2.5 自定义组件 150
3.3 生命周期的管理艺术 151
3.3.1 初探 React 生命周期 152
3.3.2 详解 React 生命周期 152
3.3.3 无状态组件 163
3.4 解密setState机制 164
3.4.1 setState异步更新 164
3.4.2 setState 循环调用风险 165
3.4.3 setState调用栈 166
3.4.4 初识事务 168
3.4.5 解密setState 170
3.5 diff 算法 172
3.5.1 传统 diff 算法 172
3.5.2 详解 diff 172
3.6 React Patch 方法 181
3.7 小结 183
第4章 认识 Flux 架构模式 184
4.1 React 独立架构 184
4.2 MV* 与 Flux 190
4.2.1 MVC/MVVM 190
4.2.2 Flux 的解决方案 193
4.3 Flux 基本概念 194
4.4 Flux 应用实例 198
4.4.1 初始化目录结构 198
4.4.2 设计 store 198
4.4.3 设计 actionCreator 200
4.4.4 构建 controller-view 202
4.4.5 重构 view 203
4.4.6 添加单元测试 205
4.5 解读 Flux 206
4.5.1 Flux 核心思想 206
4.5.2 Flux 的不足 207
4.6 小结 207
第5章 深入 Redux 应用架构 208
5.1 Redux 简介 208
5.1.1 Redux 是什么 208
5.1.2 Redux 三大原则 209
5.1.3 Redux 核心 API 210
5.1.4 与 React 绑定 211
5.1.5 增强 Flux 的功能 212
5.2 Redux middleware 212
5.2.1 middleware 的由来 212
5.2.2 理解 middleware 机制 213
5.3 Redux 异步流 217
5.3.1 使用 middleware 简化异步
请求 217
5.3.2 使用 middleware 处理复杂
异步流 221
5.4 Redux 与路由 224
5.4.1 React Router 225
5.4.2 React Router Redux 227
5.5 Redux 与组件 229
5.5.1 容器型组件 229
5.5.2 展示型组件 229
5.5.3 Redux 中的组件 230
5.6 Redux 应用实例 231
5.6.1 初始化 Redux 项目 231
5.6.2 划分目录结构 232
5.6.3 设计路由 234
5.6.4 让应用跑起来 235
5.6.5 优化构建脚本 239
5.6.6 添加布局文件 239
5.6.7 准备首页的数据 242
5.6.8 连接 Redux 245
5.6.9 引入 Redux Devtools 250
5.6.10 利用 middleware 实现 Ajax
请求发送 251
5.6.11 请求本地的数据 252
5.6.12 页面之间的跳转 253
5.6.13 优化与改进 256
5.6.14 添加单元测试 257
5.7 小结 258
第6章 Redux 高阶运用 259
6.1 高阶 reducer 259
6.1.1 reducer 的复用 259
6.1.2 reducer 的增强 261
6.2 Redux 与表单 262
6.2.1 使用 redux-form-utils 减少
创建表单的冗余代码 263
6.2.2 使用 redux-form 完成表单的
异步验证 265
6.2.3 使用高阶 reducer 为现有模块
引入表单功能 267
6.3 Redux CRUD 实战 268
6.3.1 准备工作 268
6.3.2 使用 Table 组件完成“查”
功能 269
6.3.3 使用 Modal 组件完成“增”
与“改” 274
6.3.4 巧用 Modal 实现数据的删除
确认 277
6.3.5 善用 promise 玩转 Redux 异步事件流 278
6.4 Redux 性能优化 279
6.4.1 Reselect 280
6.4.2 Immutable Redux 282
6.4.3 Reducer 性能优化 282
6.5 解读 Redux 284
6.5.1 参数归一化 285
6.5.2 初始状态及 getState 286
6.5.3 subscribe 286
6.5.4 dispatch 287

6.5.5 replaceReducer 288
6.6 解读 react-redux 288
6.6.1 Provider 288
6.6.2  connect 290
6.6.3 代码热替换 293
6.7 小结 294
第7章 React 服务端渲染 295
7.1 React 与服务端模板 295
7.1.1 什么是服务端渲染 295
7.1.2 react-view 296
7.1.3 react-view 源码解读 296
7.2 React 服务端渲染 299
7.2.1 玩转 Node.js 300
7.2.2 React-Router 和 Koa-Router
统一 303
7.2.3 同构数据处理的探讨 306
7.3 小结 307
第8章 玩转 React 可视化 308
8.1 React 结合 Canvas 和 SVG 308
8.1.1 Canvas 与 SVG 308
8.1.2 在 React 中的 Canvas 310
8.1.3 React 中的 SVG 311
8.2 React 与可视化组件 316
8.2.1 包装已有的可视化库 316
8.2.2 使用 D3 绘制 UI 部分 317
8.2.3 使用 React 绘制 UI 部分 319
8.3 Recharts 组件化的原理 322
8.3.1 声明式的标签 323
8.3.2 贴近原生的配置项 325
8.3.3 接口式的 API 326
8.4 小结 328
附录A 开发环境 329
附录B 编码规范 345
附录C Koa middleware 349

感悟与笔记

事件

在view层,react采用了JSX语法来表示虚拟DOM,虚拟DOM在内存中以对象的形式存在。那么在对象上面直接添加事件就变得非常简单了。react基于虚拟DOM实现了一个合成事件层,有自己的事件机制。

比如一个button元素在view层的结构:

<button class="btn" onClick = {handleClick}>
  <em>sure</em>
</button>

经过编译之后,在内存中的结构:

{
  type:"button",
  props:{
   className:"btn",
   children:[{
     type:"em",
     props:{
      children:'sure'
     }
    }],
   onClick:handleClick
  }
}

需要特别注意的是,在react中写的onClick属性并不是我们写原生绑定事件的DOM0级绑定方法,而是react内部实现的合成事件层提供的绑定方式。

那么react实现的事件合成层的内部机制是怎样的呢?

在合成事件底层,主要就做了两件事:

1.事件委派

它并不会把事件绑定在真实的节点上,而是把所有事件绑定在结构的最外层,使用一个统一的事件监听器,事件监听器上面维持了一个映射来保存所有组件内部的事件监听和处理函数。简化了事件处理和回收机制。这种做法其实和JQ里面的on事件是很像的,举个例子:

$(document.body).on('click','button',function(){
  //do something
})

如果把所有事件绑定在document.body上面,那么绑定事件会大大的减少,内存占用也会减少很多,当页面卸载时,只需要把document.body上面的绑定事件移除就可以了。这对于性能上面,是一个提升。

2.自动绑定

在react组件中,每个方法的上下文都会指向该组件实例,即自动绑定this为当前组件。但是在使用es6 class或者纯函数时,这种自动绑定就不存在了,需要我们去手动实现this的绑定。可以使用bind方法,或者箭头函数来固定this。

虽然react合成事件的优点很多,但是在一些场景下面,还是需要原生事件的。比如说,一个下拉框,当点击页面其他空白的时候,隐藏下拉框,这时候就需要把事件绑定在body上面,但是body在组件范围之外,只能使用原生事件来绑定。

最后总结下合成事件的特性:

  1. 合成事件是原生事件的子集,它只是实现了dom level3 的事件接口,并且统一了浏览器的兼容性问题,但是还是有些事件没实现的,比如resize事件。
  2. 合成事件都绑定在事件冒泡阶段。
  3. 合成事件的绑定方式只有一种。
  4. 事件对象不存在兼容性问题,原生事件的话,在ie浏览器里面要通过window.e来获取事件。

会员免费下载

链接:https://pan.baidu.com/s/1ejEqPW_A_3t7o94JIesTQw

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

前端框架

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.