- 文本节点的内容直接用fiber.props代替
- 测试全部改成jest
- cWU钩子在调用时必须移除
- 批量更新时,每个组件只能更新一次
- 重构受控组件,它们会延后在batchedUpdate中执行,跑通所有测试
- emptyElement不再递归移除,但会递归清空附于元素节点上的数据,以防内存泄露
- 将createClass移出核心库
- 重构错误边界,边界组件带有capturedValues,catchError, caughtError标识,并放进全局的boundaries
- 重构contextStack,保证setState后,从当前组件的unmaskedContext中还原之前的栈
处理移动端下中文输入法的onChange事件BUG
- React.Fragment支持key属性
- 修正有
生命周期的无状态组件
的更新BUG - 实现React.createRef与React.forwardRef
- 实现createResource与createSubscription这两个处理狀态的新包,放于lib下
- var 集体更改为let const
- 支持React16.3的createContext new API
- 添加大量React.Fragment测试,修正一些边缘的BUG
- 升级diff机制,由新旧vnode进行比较,改成fiber与新vnode进行比较,用新vnode的数据更新fiber与视图
- 添加input[type=search]的onChange事件支持
- 修正传送门在antd3.0的一个边�缘BUG(重复插入两次,导致文本节点消失)
- 属性名与方法名大改动,与React16的Fiber靠近
vnode.vtype
--> fiber.taginstance.__isStateless
--> fiber._isStatelessupdater
--> fiberupdater.vnode
--> fiber._reactInternalFiberupdater.willReceive
--> fiber._willReceiveupdater.children
--> fiber._childrenupdater.isMounted()
--> fiber._isMounted()updater.insertCarrier
--> fiber._mountCarrierupdater.insertPoint
--> fiber._mountPointupdater.parentContext
--> fiber._unmaskedContextgetChildContext
--> getUnmaskedContextgetContextByTypes
--> 为getMaskedContextCompositeUpdater.js
--> ComponentFiber.js`DOMUpdater.js
--> HostFiber.js
- 修正focus/blur事件的实现
- 修正IE6-8下onchange因为是用onproperty实现,会引发无限循环的BUG
- 修正diffProps无法修改input元素的type属性的BUG,改为在createElement方法中立即添加type属性
- 简化focus/blur事件的实现,IE7-8的实现更加精简了
- 修正wheel事件的属性计算方式,与官方保持一致
- 为了支持react-hot-loader, vnode.updater.vnode更名为vnode.updater._reactInnerFiber, vtype更名为tag
- 测试工具与调试工具进行了部分属性调整
- 修正componentWillReceiveProps 的执行条件
- 支持children为函数
- 修改_disposed开关的位置
- 修正焦点系统,它只会在browser的insertElement, removeElement中执行
- 修正focus/blur事件的绑定方式,捕获时需要屏蔽内部的事件
- 修正insertElement中多执行一次无效的DOM插入操作及CompositeUpdatet.hydrate的insertElement传参错误
修正 unstable_renderSubtreeIntoContainer 中context对象的错误指向
- 修正受控组件 radio的BUG,它导致无法修改value
- 解决移动端scroll事件
- 解决移动端点击事件
- 解决PropTypes的share问题
- 修复utils的inherit BUG
- 添加后端渲染的renderToNodeStream支持
- Component添加isReactCompent方法,增强对第三方的支持
- cloneElement需要处理disposed元素
- cloneElement 对于props的虚拟DOM进行复制
- 设置属性的时机提前
- 优化fiberizeChildren的性能
- 修复受控组件在textarea, radio的BUG,将受控事件放到用户�事件后集中执行
- 添加焦点系统的支持(全局focus,blur事件提前监听,移除添加节点的Refs.nodeOperate开头)
- 解决多次引入React时,事件系统的option.async有问题的BUG
- 简化createPortal的实现
- 支持React16.2的Fragment语法糖
- 重构findDOMNode,遇到注释节点返回null
- 支持React组件返回任何数据类型,如数组,字符串,数字,布尔,但对于undefined, null, boolean不会生成真实DOM
- 支持componentDidCatch钩子与整个错误边界的逻辑
- 支持createPortal
- 分离出Vndoe模块,并且附带其节点关系属性(return, sibling, child),
- return相当于之前的_hostParent,
- sibling相当于nextSibling,
- child相当于firstChild,
- 模仿React16,使用
stateNode属性
代替旧有的_hostNode与_instance。 - React.Children与flattenChilden底层依赖的方法由_flattenChildren改为operateChildren,让其更具通用性,
flattenChilden更名为fiberizeChildren,产出一个
带链表结构的数组
。 - 新的架构:元素虚拟DOM与组件虚拟DOM都有自己的更新对象,简化匹配算法
- 简化Refs模块
- 修复更新虚拟DOM时,namespaceURI丢失的BUG
- componentDidUpdate现在只有两个参数,lastProps与lastState
- 修正flushUpdaters中updater对象的泄露问题(需要clearArray一下)
- 优化diffChildren的逻辑,防止出现parentNode等于null的情况(比如为文本节点取firstChild)
- 简化ControlledComponent与dispose模块
- 处理updateElement方法中两个虚拟DOM的引用一样时,调用flattenChildren时,旧的vchildren丢失的情况
- 移除Refs中的createStringRef,createInsanceRef,添加fireRef, 重构detachRef,clearRefs,cloneElement,createElement有关ref的部分,尽量减少闭包的应用
- 将updateQueue数组移出所有diff方法,合并到调度器中
- 抽象出一个Update类,用于封装组件实例上的所有私有数据
- 抽象出一个instantiateComponente用于同时实例化有状态与无状态组件,从此再没有mountStateless, updateStateless方法
- 修正checkbox点一下会触发两次onChange的BUG
- 添加ReceiveComponent检测机制,如果context,props一样,那么就不会执行receive, render, update等钩子
- 修改检测空对象的逻辑
- 简化任务调度系统的逻辑
- 修正 onChange 事件
- 重构 diffProps 模块的实现
- 支持组件的isMounted方法
- 添加beforePatch , afterPatch钩子
- 添加lib/ReactInputSelection.js
- 统一所有操作虚拟DOM的方法的参数(mountXXX, updateXXX, alignXXX系列)
1 第一个参数为旧真实DOM或旧虚拟DOM 2 第二个参数为新虚拟DOM 3 第三个参数为父虚拟DOM(可能不存在,那么后面直接跟第四,第五) 4 第四个参数为上下文对象 5 第五个参数为任务调度系系统的列队
- 使用全新的方式获取元素的命名空间
- 上线全新的节点排序算法(diffChildren)
- renderByAnu在全局渲染后应该置空CurrentOwner.cur, 防止影响其他虚拟DOM
- 完善createStringRef方法,应该能抛错与删除无用数据
- 上线全新的任务调度系统
- 重构unmountComponentAtNode方法
- 添加对两个虚拟DOM的引用都相同的情况下,检测子组件的contextType决定是否更新的策略
- 无状态组件支持模块模式(返回一个带生命周期钩子的纯对象,这些方法会像有状态组件那样被调用)
- 放松shouldComponentUpdate的限制,返回任何假值都阻止子孙更新
- 修正ref的更新方式
- shouldComponentUpdate返回假值时,当前的虚拟DOM应该吸纳旧虚拟DOM的有用信息
- 简化createClass
- 修正flattenHooks BUG, 如果hooks中只有一个函数,就不用再包一层
- 重构虚拟DOM树的实现,与官方React保持一致,即props.children现在是多种形态,延迟到diff时才创建用于比较的vchildren
- 修正disposeElement,如果存在dangerouslySetInnerHTML的情况,需要清空元素内部,不走遍历子虚拟DOM的分支
- 修正diffProps, SVG的元素是区分大小写 如viewBox preserveAspectRation
- 组件更新时,要检测context是否改变
- 为事件对象实现persist方法
- 修正unstable_renderSubtreeIntoContainer的回调的this指向问题
- 修正unmountComponentAtNode BUG, #text改为 #comment
- 修正cloneElement BUG, 确保children与_owner正确传入
- 修正ref机制,如果为字符串时,通过createStringRef方法将当前ref, owner传入,返回一个curry方法,在cloneElement时 createStringRef创建的方法会再被整合到新ref方法的内部,确保旧的owner再次被更新
- 修正getNs方法的实现(原先是使用hash表进行穷举,但svg文档也有a, script ,style元素,导致无法区分)
- 用户在componentDidUpdate使用setState是不当操作,导致进入死循环,改用定时器减缓调用频率,防止页面卡死(官方React也存在类似的机制)
- disabled的元素不能触发点击事件
- 修正mouseenter/mouseleave在IE6-8中的BUG,涉及到relatedTarget的正确获取与LCA处理
- 简化alignVnode的逻辑,减少插入列队的生成
- 重构setStateImpl,
_component
更名为__component
,_currentElement
更名为__current
- react/lib中添加一些简用的外围模块,如ReactComponentWithPureRenderMixin,shallowCompare,sliceChildren
- 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方法中只执行一次dangerouslySetInnerHTML的BUG
- 处理mouseenter/mouseleave的兼容问题
- 处理focus/blur的兼容问题
- 处理用户在render方法 return this.props.children 的情况,需要将数组转换为单个虚拟DOM
- 处理两个组件虚拟DOM都没有实例化的情况
- 只回收文本节点
- 支持mouseenter/mouseleave及重构事件系统
- 重新支持chrome DevTools
- 添加对Immutable.js的支持
- 修复用户在componentWillUpdate/shouldComponentUpdate/componentDidUpdate钩子中执行setState引发死循环的BUG
- 优化scheduler机制
- 实现对createFactory的支持
- 优化dispose模块
- 使用typeNumber代替typeof关键字,减少打包后的体积
- 修正 unable to preventdefault inside passive event listener due to target 的错误处理, 这是chrome51+, 为了提高性能,默认对touchmove/mousemove/mousewheel事件禁用preventDefault方法引发的问题
- 销毁元素节点,彻底清除_component与__events引用
- 取消refs.xxx = null 操作,确保组件销毁后可能还进行动画,这时会有DOM操作不会报错
- 对props.children进行增强,支持更多合法的类型
- 实现对createClass的支持
- 实现对mixin的支持
- 实现unstable_renderSubtreeIntoContainer, findDOMNode, isValidElement方法
- 实现对Children的完整支持 (only, count, forEach,map, toArray)
- 实现focus, blur, wheel的兼容处理,
- 修正更新组件时,没有添加defaultProps的BUG
- 修正diffProps一些错别字
- 实现事件对象pagex,pageY,which,currentTarget的兼容
- 修正用户在componentWillMount时调用 setState引发的BUG
- cloneElement应该能处理数组并取出其第一个元素进制复制
- 取消事务机制,改成调度任务
- 兼容IE,实现对应的polyfill文件
- 实现对IE6-8的change, input, submit事件
- 添加对select.value的处理
- 支持cloneElement
- 发布anu