更新记录 #

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

v1.1.8 (2018/1/22) #

  • 修复了一个移动端 scroll 事件的问题

v1.1.7 (2018/1/12) #

  • 修复了一个移动端 click 事件不触发的问题

v1.1.6 (2017/12/5) #

  • 修复了一个在 diffChildren 过程中没有 updater 的问题。
  • 修复了一个 SVG 属性赋值的问题,这个问题曾导致值为数字 0 的属性被错误的赋值为空字符串。
  • 修复了一个在 componentDidMountcomponentDidUpdate 中调用 setState() 时重复渲染的问题。
  • Server Side Render 中增加 componentWillMount 生命周期钩子。
  • 移除 Server Side Render 中的 data-react-checksumdata-reactroot 属性。
  • Server Side Render 支持 renderToNodeStream()renderToStaticNodeStream()
  • 改善事件回调错误捕捉,现在错误信息会提供 QReact 报错的位置。
  • 修复一个 diffProps() 函数的错误,这个错误曾经导致 props 没有更新。
  • 修复一个 QReact 在 SSR 中的错误,QReact 中使用 XMLHTTPRequest 对象来判断浏览器版本,而在 node.js 中没有这个对象导致出错。
  • 修改了 ReactDOMServer.js 的打包脚本,将 babelHelpers 包含在打包文件中,以便支持低版本 node.js。
  • 在根目录增加了 server.js,以便支持 react-dom/server 的引用。

v1.1.5 (2017/11/21) #

  • 修复组件返回 Immutable.js 实例时无法正确渲染的问题。
  • 修复 SVG 命名空间丢失的问题。
  • 增加组件事件回调函数中的错误捕捉。
  • 所有已废弃警告消息级别由 error 降至 warn

v1.1.4 (2017/10/20) #

  • 增加一个专门给 IE 使用的 ReduxIE,使用 qreact/lib/ReduxIE 引入
  • 修改 property 方法,仅部分属性通过赋值空字符串来删除
  • 其他一些性能优化

v1.1.3 (2017/10/19) #

  • 抽象出一个 Updater 类,用于封装组件实例上的所有私有数据
  • 抽象出一个 instantiateComponente 用于同时实例化有状态与无状态组件,从此再没有 mountStateless, updateStateless 方法
  • 修正 checkbox 点一下会触发两次 onChange 的 BUG
  • 添加 ReceiveComponent 检测机制,如果 context, props 一样,那么就不会执行 receive, render, update 等钩子
  • 修改检测空对象的逻辑
  • 简化任务调度系统的逻辑
  • 添加 userRef 来优化 ref 在 cloneElement 中的创建及 detachRef 的比较,修正 flushUpdatersupdater 对象的泄露问题(需要 clearArray 一下)
  • 优化 diffChildren 的逻辑,防止出现 parentNode 等于 null 的情况(比如为文本节点取 firstChild
  • 简化 ControlledComponentdispose 模块

v1.1.2 (2017/9/21) #

  • 修正 onChange 事件
  • 重构 diffProps 模块的实现
  • 支持组件的 isMounted 方法
  • 添加 beforeRender, beforePatch, afterPatch 钩子
  • 添加 lib/ReactInputSelection.js

v1.1.1 (2017/9/20) #

  • 修正 onChange 事件
  • 重构 diffProps 模块的实现
  • 支持组件的 isMounted 方法
  • 重构虚拟 DOM 树的实现,与官方 React 保持一致,即 props.children 现在是多种形态,延迟到 diff 时才创建用于比较的 vchildren
  • 修正 ref 机制,如果为字符串时,通过 createStringRef 方法将当前 ref,owner 传入,返回一个 curry 方法,在 cloneElementcreateStringRef 创建的方法会再被整合到新 ref 方法的内部,确保旧的 owner 再次被更新
  • 修正 getNs 方法的实现(原先是使用 hash 表进行穷举,但 svg 文档也有 a, script ,style 元素,导致无法区分)
  • 用户在 componentDidUpdate 使用 setState 是不当操作,导致进入死循环,改用定时器减缓调用频率,防止页面卡死(官方 React 也存在类似的机制)

v1.1.0 (2017/9/7) #

  • 简化 createClass
  • 修正 flattenHooks BUG:如果 hooks 中只有一个函数,就不用再包一层
  • createElement 里不对 children 进行处理,延迟到 diff 时才创建用于比较的 vchildren
  • 修正 disposeElement BUG:如果存在 dangerouslySetInnerHTML 的情况,需要清空元素内部,不走遍历子虚拟 DOM 的分支
  • 修正 diffProps, SVG 元素是区分大小写 如 viewBox preserveAspectRation
  • 组件更新时,要检测 context 是否改变
  • 增加事件对象的 persist 方法
  • 修正 unstable_renderSubtreeIntoContainer 的回调 this 指向问题
  • 修正 unmountComponentAtNode BUG:#text 改为 #comment
  • 修正 cloneElement BUG
  • ref 改为在 createElement 里进行处理

v1.0.4 (2017/8/29) #

  • 简化 createClass

v1.0.3 (2017/8/24) #

  • disabled 的元素不能触发点击事件
  • 修正 mouseenter / mouseleave 在 IE6-8 中的 BUG,涉及到 relatedTarget 的正确获取与 LCA处理
  • 优化 setState 方法,虚拟 DOM 没有转换出对应的真实 DOM 时,不是能更新组件
  • 简化 alignVnode 的逻辑,减少插入列队的生成
  • react/lib 中添加一些简用的外围模块,如 ReactComponentWithPureRenderMixinshallowComparesliceChildren

v1.0.2 (2017/8/21) #

  • event.originalEvent 更名为 event.nativeEvent
  • 修正 polyfill中forEach 的 BUG
  • 移除 scheduler 模块
  • 移除 instanceMap 模块
  • 修正 typeNumber 在 IE6-8 下的 BUG
  • eventSystem.addGlobalEventListener 更名为 eventSystem.addGlobalEvent
  • 规避 insertBfore 在 IE8 下第二参数不能为 undefined 的问题
  • 修正 ref 延迟执行的 BUG,组件所在的 vnode 如果有 ref 属性,那么它应该放到此组件的 __pendingRefs 数组中,而不是放在父组件的 __pendingRefs 数组,此外 __pendingRefs 数组里的元素由对象改成函数
  • 确保组件在 componentDidMount 钩子执行 setState 后,所有回调应延迟到 componentDidUpdate 外执行
  • 确保 mountComponent 中实例应该尽快保存到 vnode
  • 修正 updateElement 方法中只执行一次 dangerouslySetInnerHTMLBUG
  • 处理 mouseenter/mouseleave 的兼容问题
  • 处理 focus/blur 的兼容问题

v1.0.1 (2017/8/7) #

  • 修复了在特定条件下调用 setState 时 IE 8 视图不更新的问题。

v1.0.0 (2017/7/28) #

  • 发布 QReact 正式版。