V2 更新记录
v2.2.0 (2018/6/13)
- 测试全部改成 jest
componentWillUnmount 钩子在调用时必须移除
- 批量更新时,每个组件只能更新一次
- 重构受控组件,它们会延后在
batchedUpdate 中执行,跑通所有测试
emptyElement 不再递归移除,但会递归清空附于元素节点上的数据,以防内存泄露
- 将
createClass 移出核心库
- 重构错误边界,边界组件带有
capturedValues,catchError, caughtError 标识,并放进全局的 boundaries
- 重构
contextStack,保证 setState 后,从当前组件的 unmaskedContext 中还原之前的栈
- 文本节点的内容直接用
fiber.props 代替
- 修正 input 的拼音输入法 BUG
- 修正
updateHostComponent 中覆盖 children 对象的 BUG
- 修正
createClass BUG
- 修正 SSR 的 BUG
- 简化
commitDFS 循环
- 添加 miniCreateClass, 并用它重构
createClass, Unbatch, PureComponent, createContext
- 添加一个
WORKING 任务,避免整棵树更新
- 修复受控组件中
option 的 IE8- 的兼容 BUG
- 添加一个内置的路由器
v2.1.5 (2018/4/27)
- 修复
Fragment 渲染顺序错误的问题
- 修复
alt 属性被错误删除的问题
- 修复
img 等元素 onLoad、onError 等事件不触发的问题
v2.1.4 (2018/4/12)
- 修复移动端下 IME 导致的
change 事件触发问题
v2.1.3 (2018/4/10)
- 修复 IE 8 下为
input 指定 type 出错的问题
- 更新编译打包代码
v2.1.2 (2018/3/30)
- 修复特定条件下无法更新的问题
- 移除所有
console.log, console.warn
v2.1.1 (2018/3/26)
React.Fragment 支持 key 属性
- 修正有生命周期的无状态组件的更新 BUG
- 实现
React.createRef 与 React.forwardRef
- 实现
createResource 与 createSubscription 这两个处理狀态的新包,放于 lib 下
var 集体更改为 let / const
- 修复用户自定义错误无法抛出的错误
v2.1.0 (2018/3/7)
- 支持 React v16.3 的
createContext
- 添加大量
React.Fragment 测试,修正一些边缘的 BUG
- 升级 diff 机制,由新旧
vnode 进行比较,改成 fiber 与新 vnode 进行比较,用新 vnode 的数据更新 fiber 与视图
- 添加
input[type=search] 的 onChange 事件支持
- 修正传送门在
antd@3.0 的一个边缘 BUG(重复插入两次,导致文本节点消失)
- 属性名与方法名大改动,与 React v16 的 Fiber 靠近
vnode.vtype --> fiber.tag
instance.__isStateless --> fiber._isStateless
updater --> fiber
updater.vnode --> fiber._reactInternalFiber
updater.willReceive --> fiber._willReceive
updater.children --> fiber._children
updater.isMounted() --> fiber._isMounted()
updater.insertCarrier --> fiber._mountCarrier
updater.insertPoint --> fiber._mountPoint
updater.parentContext --> fiber._unmaskedContext
getChildContext --> getUnmaskedContext
getContextByTypes --> getMaskedContext
CompositeUpdater.js --> ComponentFiber.js
DOMUpdater.js --> HostFiber.js
v2.0.5 (2018/2/7)
- 修复了 IE8 及以下浏览器的
focus/blur 问题
- 修复了 IE8 及以下浏览器的
onchange 事件由于采用 onproperty 实现而导致的无限循环问题
- 修复了
diffProps 无法修改 input 元素的 type 属性的问题,改为在 createElement 方法中立即添加 type 属性
v2.0.4 (2018/2/2)
- 简化
focus / blur 事件的实现,IE7-8 的实现更加精简了
- 修正
wheel 事件的属性计算方式,与官方保持一致
- 为了支持
react-hot-loader, vnode.updater.vnode 更名为 vnode.updater._reactInnerFiber, vtype 更名为 tag
- 测试工具与调试工具进行了部分属性调整
v2.0.3 (2018/2/1)
- 修正
componentWillReceiveProps 的执行条件,修改 _disposed 开关的位置
- 修正焦点系统,它只会在
browser.js 的 insertElement,removeElement 中执行
- 修正 focus/blur 事件的绑定方式,捕获时需要屏蔽内部的事件
- 修正
insertElement 中多执行一次无效的 DOM 插入操作及 CompositeUpdater.hydrate 的 insertElement 传参错误
v2.0.2 (2018/1/30)
- 添加了
componentWillReceiveProps 的触发条件,只有 context 对象和 Vnode 不一样才会触发该钩子
v2.0.1 (2018/1/26)
v2.0.0 (2018/1/22)
- 全面支持 React v16 新特性
- 重构
findDOMNode ,遇到注释节点返回 null
- 支持 React 组件返回任何数据类型,如数组,字符串,数字,布尔,但对于
undefined, null, boolean 不会生成真实 DOM
- 支持
componentDidCatch 钩子与整个错误边界的逻辑
- 支持
createPortal
- 分离出 Vndoe 模块,并且附带其节点关系属性(
return, sibling, child),
return 相当于之前的 hostParent,
sibling 相当于之前的 nextSibling,
child 相当于之前的 firstChild,
- 模仿 React v16,使用
stateNode 属性代替旧有的 hostNode 与 instance。
React.Children 与 flattenChildren 底层依赖的方法由 flattenChildren 改为 operateChildren,让其更具通用性, flattenChildren 更名为 fiberizeChildren,产出一个带链表结构的数组。
- 新的架构:元素虚拟 DOM 与组件虚拟 DOM 都有自己的更新对象,简化匹配算法
- 简化 Refs 模块
- 修复更新虚拟 DOM 时,
namespaceURI 丢失的 BUG
componentDidUpdate 现在只有两个参数,lastProps 与 lastState
- 优化
fiberizeChildren 的性能
- 修复受控组件在
textarea, radio 的 BUG,将受控事件放到用户 事件后集中执行
- 添加焦点系统的支持(全局 focus, blur 事件提前监听,移除添加节点的
Refs.nodeOperate 开头)
- 解决多次引入 React 时,事件系统的
option.async 有问题的 BUG
- 简化
createPortal 的实现
- 支持 React v16.2 的
Fragment 语法糖
cloneElement 需要处理 disposed 元素
cloneElement 对于 props 的虚拟 DOM 进行复制
- 设置属性的时机提前