V2 更新记录

v2.2.0 (2018/6/13)

  • 测试全部改成 jest
  • componentWillUnmount 钩子在调用时必须移除
  • 批量更新时,每个组件只能更新一次
  • 重构受控组件,它们会延后在 batchedUpdate 中执行,跑通所有测试
  • emptyElement 不再递归移除,但会递归清空附于元素节点上的数据,以防内存泄露
  • createClass 移出核心库
  • 重构错误边界,边界组件带有 capturedValuescatchError, 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 等元素 onLoadonError 等事件不触发的问题

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.createRefReact.forwardRef
  • 实现 createResourcecreateSubscription 这两个处理狀态的新包,放于 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.jsinsertElementremoveElement 中执行
  • 修正 focus/blur 事件的绑定方式,捕获时需要屏蔽内部的事件
  • 修正 insertElement 中多执行一次无效的 DOM 插入操作及 CompositeUpdater.hydrateinsertElement 传参错误

v2.0.2 (2018/1/30)

  • 添加了 componentWillReceiveProps 的触发条件,只有 context 对象和 Vnode 不一样才会触发该钩子

v2.0.1 (2018/1/26)

  • props.children 现在可以是函数类型

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 属性代替旧有的 hostNodeinstance
  • React.ChildrenflattenChildren 底层依赖的方法由 flattenChildren 改为 operateChildren,让其更具通用性, flattenChildren 更名为 fiberizeChildren,产出一个带链表结构的数组。
  • 新的架构:元素虚拟 DOM 与组件虚拟 DOM 都有自己的更新对象,简化匹配算法
  • 简化 Refs 模块
  • 修复更新虚拟 DOM 时,namespaceURI 丢失的 BUG
  • componentDidUpdate 现在只有两个参数,lastPropslastState
  • 优化 fiberizeChildren 的性能
  • 修复受控组件在 textarea, radio 的 BUG,将受控事件放到用户  事件后集中执行
  • 添加焦点系统的支持(全局 focus, blur 事件提前监听,移除添加节点的 Refs.nodeOperate 开头)
  • 解决多次引入 React 时,事件系统的 option.async 有问题的 BUG
  • 简化 createPortal 的实现
  • 支持 React v16.2 的 Fragment 语法糖
  • cloneElement 需要处理 disposed 元素
  • cloneElement 对于 props 的虚拟 DOM 进行复制
  • 设置属性的时机提前