javascript类型转换结果 如何用js实现一个简单的react?
如何用js实现一个简单的react?
谢谢你邀请我!
编写react应用程序可以分为以下几个步骤:
1.写入组件
组件分为类组件和功能组件。类组件需要继承react的组件基类,有自己的生命周期钩子函数。
2.状态管理
数据由props传入,组件本身的状态可以由类组件内部的状态控制。
3.调用入口函数
应用可以通过webpack(babel processing jsx)打包编译生成。
react里有一个虚拟dom的概念,那么什么是虚拟dom呢?实际上,它是一个对象,如下所示:
是对jsx的描述。jsx不能作为真正的dom插入页面,需要进一步的转换。babel会把jsx改造成一堆由createElement组成的执行函数,如下:
然后将createElement返回的数据组装到上面提到的虚拟dom中。
那么要实现一个react,就需要实现三个部分:createElement、render和Component!
函数
第一个参数type是type,可能是class、function、dom的标记名,第二个参数props是jsx中定义的标记的属性,包括自定义属性和自定义事件。
2、渲染
render想要完成的就是把虚拟的dom渲染成真实的dom,可以更新!解决方案是遍历这个虚拟dom树。
遇到dom标签,生成dom节点,从props中取出属性和事件(事件的键都以on开头),完成绑定,追加到父元素中。
遇到一个类组件,直接创建一个实例,运行实例的render方法,生成组件的虚拟dom,展开递归,遇到dom标签就添加到父元素。在这个阶段,您可以在生命周期中运行各种钩子函数。
遇到函数就直接执行,生成组件的虚拟dom,展开递归,遇到dom标签就添加到父元素。
3.差异(插入一点)
如何做diff?实际上,最后一棵虚拟dom树保存在内存中,生成新的虚拟dom树后,可以一层一层地做diff,这也是为什么在写react的状态时,需要生成一个新的对象来中断引用,以免影响diff。React在属性和类型变化时有一套规则,diff规则可以自己设置,不一定要跟着react。
出去面试之前有人问我如果有1000个节点和10000个节点怎么比较,递归还是很差,问的pass无语!读者可以自己思考!4、组件
这个基类相对简单简单来说就是实现一个setSate方法,在这个方法中调用更新逻辑。
综上所述,这些函数的实现基本可以实现一个react,但还是比较复杂,尤其是递归的!
喜欢我的回答就关注我。有问题可以评论。让 让我们一起学习,一起成长!
如何将字符数组里的内容转换成uint8的类型?
Uint8Array对象,8位无符号整数值的类型化数组。
内容将被初始化为0。如果无法分配请求的字节数,将引发异常。转换成普通数组的方法:
1.构造uint8array新的uint8array(长度);
2.转换方法:(1)var array(uint 8 array)(2)var array[](uint 8 array)注意://当//js向ble写入数据时,数据类型为arraybuffer类型。如果在Uint8Array对数据分组后使用subarray方法,要小心。//子数组返回的Uint8Array.buffer之后的内存是子数组之前的内存。//如果你想传输新的数据,你 你最好打开新的记忆,以避免你所看到的和你所测量的之间的差异所导致的问题。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。