这是我参与「第四届青训营」笔记创作活动的第7天
一、React的历史与应用
历史
应用
二、React设计思路
UI编程痛点
响应式和转换式
响应式系统
事件-->执行既定的回调-->状态变更
响应式编程(前端UI)
事件-->执行既定的回调-->状态变更-->UI更新
解决痛点
组件化
总结
组件设计
组件代码
三、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,useEffect}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的实现
三个问题
解决
Problem 1
Problem 2
Virtual DOM(虚拟 DOM)
Virtual DOM 是一种用于与真实DOM同步,而在JS内存中维护的一个对象,它具有和DOM类似的树状结构并可以和DOM建立一一对应的关系
这种方式赋予了 React 声明式的 API:您告诉 React 希望让 UI 是什么状态,React 就确保 DOM 匹配该状态。这使您可以从属性操作、事件处理和手动 DOM 更新这些在构建应用程序时必要的操作中解放出来。
How to Diff?
完美的最小Diff算法,需要 O(n^3) 的复杂度
而理论上牺牲最小Diff,换取时间,得到了 O(n) 复杂度的算法:
Heuristic O(n) Algorithm (启发式算法)
| 不同类型的元素 | 替换 |
|---|---|
| 同类型的DOM元素 | 更新 |
| 同类型的组件元素 | 递归 |