任何事情都是基于业务需求来实现的,即使有业务开发和基建开发的划分,但如果没有需求,做基建又哪会知道做什么基建呢?做的打包,做的工具包,都是基于现有需求来进行开发的,所以,了解一件事情,我们要先了解这个是做什么的,然后才开始思考他是怎么做的。
react是什么?
官方的定义是一个javascript库,用来定义用户界面。
我们为什么会需要它?html直接写不可以吗?当然可以,只不过在将修改的data展示在view时会有些麻烦。比如使用jquery写的demo:
let data = 'hello'
function setData(){
data = ‘hello world’
$('#test').text(data)
}
以上代码中,我们在每次更新data后,都需要手动使用.text()来讲将数据更新到view中。如果项目中需要展示的数据比较多,每次手动写上.text()都会觉得很繁琐。
所幸,我们有react,我们只需要这么写
setData('hello world') //react hooks写法
就会自动的帮我们将data更新到view上。
当然,react还有其他特性。这里就一一不列开,我们只讨论为什么react会出现的这么一个小需求。
现在,我们接到一个产品的需求,写出一个setData,来规避手动使用jquery进行视图更新的繁琐。敏捷开发,自己估算时间,打牌开始。
1分钟,我们先将data的值修改后,再将html值修改,怎么修改呢?我们需要判断是更新还是新增还是删除,然后使用对应的操作dom的api来进行操作。等等,这不就是前面说的jquery 命令式更新吗?
但是在react中,做的不仅仅是这两件事,为了实现跨平台,以及一些任务优先级执行,react还引入了虚拟dom和fiber。在了解虚拟dom和fiber是什么的之前,我们需要先了解react16的架构,这有利于我们逐步扩展。
在react16中,react可以分为三个架构,分别为调度器(Scheduler),协调器(Reconciler),渲染器(Renderer)
架构也是为需求而生,那这三个架构都分别做了哪些需求任务呢?
Scheduler:接受任务,根据优先级执行任务,比如,setData中,将data的值设置为修改后的值
Reconciler:接收到更新,记录更新会影响的哪些dom变化,并打上标记,其中涉及的过程有(dom diff,函数组件执行,hook等)
Renderer:就是调用操作dom api进行增删改。
Scheduler和Renderer做的事情是不是感觉很熟悉?没错,就是我们前面1分钟做的setData。没有什么高楼大厦是一夜之间崛起的,都是基于一些本来有的物料来进行堆砌,加上自己的思想设计后才形成了高楼大厦。所以,要带着放松的心情来学习。react太高大上自己看不懂,这种心理将是学习的阻碍!