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 进行复制
- 设置属性的时机提前