高性能迷你React框架anujs1.1.1发布

anujs1.1.1为了兼容国内最著名的UI库antd,在虚拟DOM树结构,ref机制,owner机制,svg的兼容上做了大量改进。到目前为止,只差两个组件没有兼容,相信下一个版本会搞定的。antd内部使用了大量的旧API与hack react的实现,因此兼容了antd,对其他比较正规的UI库,anujs也肯定能支持的。

https://github.com/RubyLouvre...

主要改良点:

  1. 简化createClass

  2. 修正flattenHooks BUG, 如果hooks中只有一个函数,就不用再包一层

  3. 修改虚拟DOM树的实现,与官方React保持一致,即props.children现在是多种形态,延迟到diff时才创建用于比较的vchildren

  4. 修正disposeElement,如果存在dangerouslySetInnerHTML的情况,需要清空元素内部,不走遍历子虚拟DOM的分支

  5. 修正diffProps,SVG的元素是区分大小写 如viewBox preserveAspectRation

  6. 组件更新时,要检测context是否改变

  7. 为事件对象实现persist方法

  8. 修正unstable_renderSubtreeIntoContainer的回调的this指向问题

  9. 修正unmountComponentAtNode BUG, #text改为 #comment

  10. 修正cloneElement BUG, 确保children与_owner正确传入

  11. 修正ref机制,如果为字符串时,通过createStringRef方法将当前ref,owner传入,返回一个curry方法,在cloneElement时createStringRef创建的方法会再被整合到新ref方法的内部,确保旧的owner再次被更新

  12. 修正getNs方法的实现(原先是使用hash表进行穷举,但svg文档也有a,script,style元素,导致无法区分)

  13. 用户在componentDidUpdate使用setState是不当操作,导致进入死循环,改用定时器减缓调用频率,防止页面卡死(官方React也存在类似的机制)

使用

npm i anujs

或者使用架手架 https://github.com/Levan-Du/a...

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加星星与试用!!!

https://github.com/RubyLouvre...

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...