anujs1.1.2 在兼容官方 React 比以往更进一步,一共跑通 293 套测试,其中 179 套是官方 React 的测试。
在 ref 机制,owner 机制,虚拟 DOM 更新机制,context 传递机制,SVG 生成策略上大大重构。是有史以来最多的更新级。但工作还没有完成,只是怕更新太多做了一次短暂的休整。
主要更新点:
-
修正
onChange
事件 -
重构
diffProps
模块的实现 -
支持组件的
isMounted
方法 -
添加
beforePatch
,afterPatch
钩子 -
添加
lib/ReactInputSelection.js
-
统一所有操作虚拟 DOM 的方法的参数(mountXXX, updateXXX, alignXXX 系列)
-
第一个参数为旧真实 DOM 或旧虚拟 DOM
-
第二个参数为新虚拟 DOM
-
第三个参数为父虚拟 DOM(可能不存在,那么后面直接跟第四,第五)
-
第四个参数为上下文对象
-
第五个参数为任务调度系系统的列队
-
使用全新的方式获取元素的命名空间
-
上线全新的节点排序算法(
diffChildren
) -
renderByAnu
在全局渲染后应该置空CurrentOwner.cur
, 防止影响其他虚拟 DOM -
完善
createStringRef
方法,应该能抛错与删除无用数据 -
上线全新的任务调度系统
-
重构
unmountComponentAtNode
方法 -
添加对两个虚拟 DOM 的引用都相同的情况下,检测子组件的
contextType
决定是否更新的策略 -
无状态组件支持模块模式(返回一个带生命周期钩子的纯对象,这些方法会像有状态组件那样被调用)
-
放松
shouldComponentUpdate
的限制,返回任何假值都阻止子孙更新 -
修正
ref
的更新方式 -
shouldComponentUpdate
返回假值时,当前的虚拟 DOM 应该吸纳旧虚拟 DOM 的有用信息
使用
npm i anujs
或者使用架手架 https://github.com/Levan-Du/anu-cli
npm i -g anu-cli
webpack.config
中如何代替原来用 React 编写的项目
resolve: {
alias: {
'react': 'anujs',
'react-dom': 'anujs',
// 若要兼容 IE 请使用以下配置
// 'react': 'qreact/dist/ReactIE',
// 'react-dom': 'qreact/dist/ReactIE',
// 如果引用了 prop-types 或 create-react-class
// 需要添加如下别名
'prop-types': 'qreact/lib/ReactPropTypes',
'create-react-class': 'qreact/lib/createClass'
//如果你在移动端用到了onTouchTap事件
'react-tap-event-plugin': 'anujs/lib/injectTapEventPlugin',
}
},
欢迎大家为 anujs 加星星与试用!!!