响应式系统与React | 青训营笔记
这是我参与【第四届青训营】笔记创作活动的第8天
一、React的历史与应用
React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在 2013 年 5 月开源了。
主要应用于三个方面:
-
1.前端应用开发
Facebook等网页版开发
-
移动原生应用开发
Instagram...
-
结合Electron进行桌面应用开发
二、React的设计思路
UI编程痛点
- 状态更新,UI不会自动更新,需要手动调DOM进行更新
- 欠缺基本代码层面的封装和隔离,代码层面没有组件化
- UI之间的数据依赖关系,需要手动维护,依赖链路长会遇到"Callback Hell"
响应式与转换式
响应式系统
事件——执行既定回调——状态变更
前端UI
事件——执行既定回调——状态变更——UI更新
响应式编程
- 状态更新,UI更新
- 前端代码组件化,可复用,可封装
- 状态之间的互相依赖,只需声明即可
组件化
-
React的组件相对于Vue更加的灵活和多样,按照不同的方式可以分成很多类组件:
- 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
- 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
- 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);
主要是关注数据逻辑和UI展示的分离:
-
函数组件、无状态组件、展示型组件主要关注UI的展示;
-
类组件、有状态组件、容器型组件主要关注数据逻辑;
-
组件是 组件的组合/原子组件
-
组件内拥有状态,外部不可见
-
父组件可将状态传入组件内部
组件设计
组件声明了状态和UI映射
组件有Props/State两种状态
“组件”可由其他组件拼装而成
生命周期
三、React(hooks)的写法
import React,{ useState } from 'react';
function Example() {
const [count,setCount] = useState(0);
return (
<div>
<p>YOU clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
click me
</button>
</div>
);
}
import React,{ useState } from 'react';
function Example() {
const [count,setCount] = useState(0);
useEffect(() => {
document.title = `you clicked ${count} times`;
})
return (
<div>
<p>YOU clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
click me
</button>
</div>
);
}
四、React的实现
Problems
JSX不符合JS标准语法
返回的JSX发生改变时,如何更新DOM
Virtual DOM(虚拟DOM): Virtual DOM是一种用于和真实DOM同步,而在JS内存中维护的一个对象,他具有和DOM类似的树状结构,并个DOM可有建立--对应的关系,它赋予了React声明式的API:您告诉React希望让UI是什么状态,React就确保DOM匹配该状态。这使您可有从属性操作,事件处理和手动DOM更新这些在构建应用程序时必要的操作中解放出来。
State/Props更新时,要重新触发render函数
五、小结
主要学习了一些React的基础知识,了解了React定义函数和组件化开发的方法,后续还需要继续学习。