首页系统reactjs(reactjs 官网)

reactjs(reactjs 官网)

编程之家2024-03-2996次浏览

一、react.js有哪些设计缺陷

比vue好多了

reactjs(reactjs 官网)

二、如何用js实现一个简单的react

谢谢邀请!

写一个react应用,可以分为以下几步:

1、写组件

组件分为类组件和函数式组件,类组件需要继承react的Component基类,有自己的生命周期钩子函数

2、状态管理

数据由props传入,类组件内部可以通过state控制组件自身的状态变化(setState)

reactjs(reactjs 官网)

3、调用入口函数

ReactDOM.render

4、通过webpack(babel处理jsx)打包编译即可生成react应用

在react中有一个虚拟dom的概念,那么虚拟dom是什么呢?其实它是一个对象,如下图:

它就是对jsx的描述,jsx并不能当做真正的dom插入页面中,需要做进一步的转化,babel会把jsx转化为一堆由createElement组成的执行函数,如下:

再由createElement返回的数据拼装成上面所说的虚拟dom。

那么要实现一个react,需要实现createElement、render和Component三个部分!

reactjs(reactjs 官网)

1、createElement函数

第一个参数type是类型,可能是类、函数、dom的tagName,第二个参数props就是定义在jsx中标签的属性包括自定义属性和自定义事件

2、render

render索要完成的事情就是将虚拟dom渲染成真实的dom,并且可以更新!办法就是遍历这个虚拟dom树。

遇见dom标签,生成dom节点,从props中拿出属性和事件(事件的key都是以on开头),完成绑定,append进父元素中。

遇见类组件,直接new出一个实例,运行实例的render方法,生成组件的虚拟dom,展开递归,遇见dom标签就加入父元素中,在这个阶段是可以运行生命周期中各个钩子函数的。

遇见函数,直接执行,生成组件的虚拟dom,展开递归,遇见dom标签就加入父元素中。

3、diff(插入一点)

如何做到diff呢?其实就是在内存中保留上一次的虚拟dom树,待生成新的虚拟dom树后,就可以逐层做diff,这就是为什么在写react的state时候需要生成新的对象断开引用,为的就是不能影响diff。react是在属性、类型等改变时有一套规则,diff规则可以自己定,不一定要沿用react的。

之前出去面试,别人问我如果有一千个一万个节点如何对比,递归下去依然性能很差,被问的垭口无语!读者可以自己思考一下!

4、Component

这个基类比较简单,就是实现一个setSate方法,在方法中调用更新逻辑。

综上,实现这个几个功能基本就能实现一个react了,不过还是比较复杂的,特别是递归那块!

喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!

三、react是什么语言

React是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有JavaScriptMVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。

React主要用于构建UI。你可以在React里传递多种类型的参数,如声明代码,帮助你渲染出UI、也可以是静态的HTMLDOM元素、也可以传递动态变量、甚至是可交互的应用组件。

百度特效(搞笑特效软件下载)c语言学习论坛 初学c语言看不懂怎么办