精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試必問:React和Vue各自是如何更新視圖的?

開發(fā) 前端
React 組件的 ??state?? 是不可變的,每次更新狀態(tài)時,我們并不會直接修改原來的 state,而是創(chuàng)建一個新的 state 對象,并用它替換舊的 state。

在 Vue 3 中,響應式系統(tǒng)是基于 Proxy 代理實現的,而 React 的狀態(tài)管理和更新機制則完全不同。React 并沒有使用 Proxy,它主要依賴 狀態(tài)不可變性(Immutability) 和 調度(Reconciliation) 機制來觸發(fā)組件更新。

?? React 是如何實現狀態(tài)更新并觸發(fā) UI 變化的?

1??  State 是不可變的

React 組件的 state 是不可變的,每次更新狀態(tài)時,我們并不會直接修改原來的 state,而是創(chuàng)建一個新的 state 對象,并用它替換舊的 state。例如:

const [count, setCount] = useState(0);

const increment = () => {
  setCount(count + 1); // 生成新的 state,觸發(fā)更新
};

React 通過 setState 或 useState 提供的 setCount 來觸發(fā)狀態(tài)更新。因為 count + 1 返回的是一個新的值,所以 React 認為狀態(tài)已變更。

2?? 觸發(fā) Re-render

當 state 發(fā)生變化時,React 不會立即更新 UI,而是會:

  1. 觸發(fā) 調度(Scheduling),將當前組件標記為需要更新;
  2. 合并多個狀態(tài)更新,在下一次渲染時一起應用;
  3. 重新執(zhí)行組件函數,得到新的 JSX 結構。

示例:

function Counter() {
  const [count, setCount] = useState(0);

  console.log("組件渲染了"); // 每次 state 更新時,組件都會重新執(zhí)行

  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

每次 setCount 觸發(fā)時,React 不會直接修改 DOM,而是會重新執(zhí)行 Counter 組件函數,生成新的 JSX,然后 React 通過 Diffing 算法 找出變化的地方,再進行高效的 DOM 更新。

3?? Diffing 和 Reconciliation 機制

當 state 發(fā)生變化時,React 并不會暴力重新渲染整個頁面,而是:

  • 比較(Diffing)新舊 Virtual DOM,找出變化的部分;
  • 高效更新(Reconciliation) 只修改受影響的 DOM 片段。

示例:

function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>Hello</h1>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

在 setCount(count + 1) 觸發(fā)后:

1.React 重新執(zhí)行 App 組件,生成新的 Virtual DOM

<div>
  <h1>Hello</h1>
  <p>Count: 1</p>  // 變化的地方
  <button>Increment</button>
</div>

2.React 發(fā)現 h1 和 button 沒變,只更新 <p> 標簽的文本內容,而不是整個 div

4?? React 為什么不用 Proxy?

Vue 3 通過 Proxy 直接監(jiān)聽對象的變化,實現細粒度的響應式,而 React 依賴 不可變數據 和 Virtual DOM: ? React 方案的優(yōu)勢:

  • 避免直接修改對象,防止副作用(確保狀態(tài)變更可預測)。
  • 優(yōu)化性能:通過 Diffing 機制減少不必要的 DOM 更新。
  • 適用于函數式編程,配合 useStateuseReducer 等 hook 進行狀態(tài)管理。

缺點:

  • 需要手動使用 setState,不像 Vue 那樣直接修改對象就會自動觸發(fā)更新。
  • 深層嵌套對象需要手動更新:
const [user, setUser] = useState({ name: "Alice", age: 25 });

setUser({ ...user, age: 26 }); // 不能直接 user.age = 26
  • Vue 通過 Proxy 代理可以自動檢測到 user.age = 26 的變化,而 React 需要創(chuàng)建新對象才能觸發(fā)更新。

?? 總結:React 如何更新 UI?

  1. 狀態(tài)不可變(Immutability):每次修改 state 時,必須創(chuàng)建新的對象或值。
  2. 組件重新執(zhí)行:當 state 變化時,React 重新運行組件函數,返回新的 JSX 結構。
  3. Diffing & Reconciliation
  • React 比較新舊 Virtual DOM,找出變化的部分;
  • 只更新需要修改的 DOM 節(jié)點,而不是整個頁面。

?? 這就是 React 不用 Proxy 也能高效更新 UI 的關鍵!

Vue 3 的更新過程主要依賴 響應式系統(tǒng)(基于 Proxy 和 虛擬 DOM(Virtual DOM),它能夠高效地追蹤數據變化,并只更新需要修改的部分 DOM。下面詳細解析 Vue 3 的更新過程。

?? Vue 3 是如何觸發(fā) UI 更新的?

1?? 響應式系統(tǒng)(Reactive System)

Vue 3 通過 Proxy 代理對象的 get 和 set 操作,實現自動追蹤依賴 & 觸發(fā)更新。當你修改 state 時,Vue 會:

  • 追蹤數據(依賴收集)
  • 檢測變化(觸發(fā)更新)
  • 重新渲染 Virtual DOM 并更新真實 DOM

?? 示例:Vue 3 如何監(jiān)聽數據變化

import { reactive } from "vue";

const state = reactive({ count: 0 });

console.log(state.count); // 訪問屬性時,Vue 記錄依賴
state.count++;  // 修改屬性時,Vue 觸發(fā)更新

Vue 3 通過 Proxy 代理 state,監(jiān)聽 count 變化,自動通知視圖更新。

Vue 2 使用 Object.defineProperty() 只能監(jiān)聽對象已有的屬性,Vue 3 的 Proxy 解決了這個局限,支持監(jiān)聽新增/刪除的屬性。

2?? 依賴收集(Dependency Collection)

Vue 需要知道哪些組件或計算屬性依賴 state.count,這樣當 count 變化時,它只會更新受影響的組件,而不是整個應用。

工作流程:

  • 當組件渲染時,Vue 訪問 state.count,觸發(fā) get,將該組件注冊為 count 的依賴(收集副作用 effect)。
  • 以后 count 變化時,Vue 會通知所有依賴它的地方更新。

示例:

import { reactive, effect } from "vue";

const state = reactive({ count: 0 });

// 創(chuàng)建一個副作用(Effect)
effect(() => {
  console.log("Count changed:", state.count);
});

state.count++; // 修改時觸發(fā) effect,打印 "Count changed: 1"

在 Vue 組件內部,effect() 由 Vue 自動管理,開發(fā)者無需手動調用。

3?? 觸發(fā)更新(Trigger & Scheduler)

當 state.count++ 發(fā)生時,Vue 觸發(fā) set 操作:

  1. Vue 先檢查 count 是否真的變化(新值 !== 舊值)。
  2. 如果變化了,Vue 通知 effect(視圖更新邏輯)重新執(zhí)行。
  3. Vue 使用 調度器(Scheduler) 合并多個狀態(tài)更新,避免不必要的重復渲染。

示例:多個狀態(tài)變化會合并更新

<script setup>
import { reactive } from "vue";

const state = reactive({ count: 0 });

function increment() {
  state.count++;  
  state.count++;  // Vue 不會觸發(fā)兩次 DOM 更新,而是合并優(yōu)化
}
</script>

<template>
  <p>{{ state.count }}</p>
  <button @click="increment">+2</button>
</template>

Vue 通過 nextTick() 機制合并更新,減少 DOM 操作,提高性能。

4?? 重新渲染 Virtual DOM

當 state.count 變化后:

  1. Vue 重新執(zhí)行組件的渲染函數,生成新的 Virtual DOM(虛擬 DOM) 結構。
  2. Vue 對比新舊 Virtual DOM(Diffing 算法),找出變化的部分。
  3. Vue 只更新變更的 DOM 節(jié)點,而不是整個頁面。

5?? Diffing & Patch 過程

Vue 3 使用 Patch Algorithm 進行高效的 DOM 更新:

  • 如果 Virtual DOM 結構沒變(只是內容變了),Vue 直接更新文本內容。
  • 如果子元素順序發(fā)生變化,Vue 采用最小修改策略,只移動必要的節(jié)點,而不是全部重繪。

示例:

<template>
  <ul>
    <li v-for="item in list" :key="item.id">{{ item.text }}</li>
  </ul>
</template>

<script setup>
import { reactive } from "vue";

const list = reactive([
  { id: 1, text: "Vue" },
  { id: 2, text: "React" }
]);

setTimeout(() => {
  list.reverse(); // Vue 只會調整 DOM 位置,而不會重新創(chuàng)建 <li>
}, 2000);
</script>

Vue 只移動 <li> 位置,而不會銷毀 & 重新創(chuàng)建整個列表。

?? Vue 3 的 UI 更新完整流程

1?? 訪問響應式數據(Proxy get) → 觸發(fā)依賴收集

2?? 數據變更(Proxy set) → 觸發(fā)更新(Effect 重新執(zhí)行)

3?? Vue 重新執(zhí)行渲染函數,生成新的 Virtual DOM

4?? Vue 進行 Diffing,找出變更的 DOM 節(jié)點

5?? Vue 使用 Patch 機制,僅更新需要修改的部分 DOM

相比 Vue 2,Vue 3 在依賴追蹤、調度和 Virtual DOM 更新上更高效!

?? Vue 3 和 React 更新機制對比

特性

Vue 3

React

響應式原理

Proxy

 代理數據,自動追蹤依賴

useState

 / useReducer,數據不可變

依賴收集

訪問數據時自動收集(get

組件渲染時自動關聯 state

狀態(tài)變更

set

 操作觸發(fā)更新

setState()

 觸發(fā)更新

組件更新機制

重新運行 渲染函數 生成 VDOM

重新執(zhí)行 組件函數 生成 VDOM

Diff 算法

只更新變化的部分

只更新變化的部分

批量更新

nextTick()

 自動合并

React 事件中 setState 會合并

?? Vue 3 的 Proxy 監(jiān)聽數據變更,React 通過 useState 返回新對象。Vue 自動追蹤依賴,而 React 需要手動 setState

?? 總結:Vue 3 是如何更新界面的?

  1. Proxy 監(jiān)聽數據變化,訪問數據時自動收集依賴,修改數據時自動觸發(fā)更新。
  2. 依賴收集(Effect 機制),組件只會在需要更新時重新渲染,而不會整個應用重繪。
  3. 批量更新(Scheduler),合并多個 setState 操作,減少不必要的渲染。
  4. Diffing & Patch 機制,Vue 只更新最小范圍的 DOM,而不是整個頁面。

?? Vue 3 更新機制的核心優(yōu)勢

更精準的依賴追蹤:基于 Proxy,比 Vue 2 更高效,支持監(jiān)聽新增/刪除屬性? 更少的渲染開銷:只有真正變化的組件才會重新渲染? 更高效的 DOM 更新:使用 Diff 算法 & Patch 機制,只更新必要部分

Vue 3 結合了響應式系統(tǒng) + Virtual DOM,讓 UI 更新更智能、更高效。希望這個解析對你理解 Vue 3 的更新機制有幫助!

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2020-09-21 14:35:20

VuenextTick前端

2021-12-27 08:22:18

Kafka消費模型

2023-02-01 07:15:16

2023-02-17 08:02:45

@Autowired@Resource

2021-12-09 12:22:28

MyBatis流程面試

2023-06-07 08:08:43

JVM內存模型

2020-07-28 08:59:22

JavahreadLocal面試

2021-09-10 18:47:22

Redis淘汰策略

2023-02-15 07:03:41

跨域問題面試安全

2023-02-03 07:24:49

雙親委派模型

2021-12-06 11:03:57

JVM性能調優(yōu)

2019-03-15 19:41:39

MySQL面試數據庫

2020-11-05 13:12:47

紅黑樹

2024-01-05 14:20:55

MySQL索引優(yōu)化器

2023-08-15 15:33:29

線程池線程數

2023-02-06 07:01:51

2021-12-13 11:12:41

Spring事務失效

2021-12-16 08:21:31

高并發(fā)消息中間件

2020-09-29 15:24:07

面試數據結構Hashmap

2020-02-18 14:25:51

Java線程池拒絕策略
點贊
收藏

51CTO技術棧公眾號

精品国产免费观看| 亚洲天堂一区二区在线观看| 欧美69xxxxx| 美国一区二区三区在线播放| 久久精品国产亚洲精品| 又黄又爽又色的视频| 国产一二三在线| 91玉足脚交白嫩脚丫在线播放| 国产97在线视频| 农村黄色一级片| 五月国产精品| 欧美一区2区视频在线观看| 僵尸世界大战2 在线播放| 极品美乳网红视频免费在线观看| 精品中文字幕一区二区| 国产91精品黑色丝袜高跟鞋| 美国一级片在线观看| 林ゆな中文字幕一区二区| 欧美片在线播放| 国产精品宾馆在线精品酒店| 久热国产在线| 久久久久久久av麻豆果冻| 97超级在线观看免费高清完整版电视剧| 久久国产精品系列| 综合日韩在线| 日韩中文在线观看| www.超碰97| 欧美视频二区欧美影视| 在线精品国精品国产尤物884a| 成人在线免费观看视频网站| 成人在线播放视频| 99亚偷拍自图区亚洲| 91亚洲永久免费精品| 蜜臀尤物一区二区三区直播| 亚洲国产mv| 久久综合色影院| 久久久久久久毛片| 亚洲男人都懂第一日本| 精品国产一区二区三区久久影院| 亚洲免费成人在线视频| 成人1区2区| 色婷婷亚洲精品| 大j8黑人w巨大888a片| 视频在线观看入口黄最新永久免费国产 | 中文字幕精品无| 亚洲精品在线二区| 久久久视频精品| 久久久精品国产sm调教网站| 中文av一区| 欧美xxxx综合视频| 日本福利片在线观看| 天天揉久久久久亚洲精品| 最新亚洲国产精品| 青青青手机在线视频| 欧美色图国产精品| 国产亚洲精品久久久久动| 91视频免费观看网站| 美女精品一区最新中文字幕一区二区三区| 亚洲第一福利视频| 69亚洲乱人伦| 日韩欧美国产大片| 亚洲欧美国产一本综合首页| 无码熟妇人妻av| 国产亚洲一区| 日韩在线中文字幕| 久久久99精品| 亚洲经典视频在线观看| 97avcom| 亚洲大片免费观看| 蜜乳av一区二区| 91久久嫩草影院一区二区| 国产免费黄色录像| 风流少妇一区二区| 久久精品国产综合精品| 免费在线黄色影片| 国产精品免费久久久久| 国产91av视频在线观看| 久草在线新免费首页资源站| 天天综合天天做天天综合| 欧美视频免费播放| 曰本一区二区| 精品国产欧美一区二区| 在线观看国产网站| 日韩国产欧美| 欧美激情精品久久久久久黑人| 尤物视频在线观看国产| 日韩福利电影在线| 91久久国产综合久久蜜月精品| 日本黄色三级视频| 国产视频一区二区在线| 永久免费在线看片视频| 国产精品论坛| 欧美日韩aaa| 中国免费黄色片| 欧美丝袜激情| 欧美精品videosex牲欧美| 中文字幕在线观看视频网站| 激情久久五月天| 精品免费日产一区一区三区免费| 69av在线| 婷婷综合久久一区二区三区| 蜜臀av免费观看| 激情亚洲另类图片区小说区| 色阁综合伊人av| 国产情侣自拍av| 韩日av一区二区| 欧美日韩精品一区| 性欧美1819sex性高清大胸| 精品日韩中文字幕| 在线免费看v片| 国产一区二区观看| 久久免费精品视频| 国产三级视频在线播放| 国产婷婷色一区二区三区四区| 日韩黄色短视频| 国产激情精品一区二区三区| 亚洲男人天堂网站| 精品一区在线视频| 精品无人区卡一卡二卡三乱码免费卡| 久久久久久99| 色爱综合区网| 3751色影院一区二区三区| 日韩乱码人妻无码中文字幕久久| 好吊日精品视频| 成人精品福利视频| 国产永久av在线| 日韩欧美在线第一页| 美女搡bbb又爽又猛又黄www| 91精品蜜臀一区二区三区在线| 国产精品电影一区| 牛牛澡牛牛爽一区二区| 精品福利视频导航| 秘密基地免费观看完整版中文| 亚洲91精品| 国产热re99久久6国产精品| 九一国产在线| 色偷偷一区二区三区| 伦理片一区二区| 国模 一区 二区 三区| 亚洲自拍偷拍视频| 二区三区在线观看| 日韩一区二区三区四区 | 欧美日韩激情在线一区二区三区| 91超碰中文字幕久久精品| 欧美一级视频免费| 亚洲v日本v欧美v久久精品| 91精品人妻一区二区三区蜜桃2| 久久精品亚洲人成影院 | 理论片在线不卡免费观看| 亚洲视频在线免费播放| 国产精品美女久久久久久| 日本人视频jizz页码69| 久久免费大视频| 成人精品aaaa网站| 午夜伦理大片视频在线观看| 日韩美女视频在线| 国产无遮挡又黄又爽在线观看 | 亚洲最大福利视频网站| 搞黄网站在线观看| 欧美一区二区三区日韩| 国产大学生自拍| 成人免费的视频| 久久精品国产精品亚洲色婷婷| 小说区图片区色综合区| 国产不卡视频在线| 日本最新在线视频| 日韩一本二本av| 国产精品成人久久| 久久丝袜美腿综合| 亚洲一级片网站| 亚洲精品2区| 国产伦精品一区二区三区| 日韩大片免费观看| 在线观看欧美成人| a天堂视频在线| 精品久久久久久久久国产字幕| 欧美亚一区二区三区| 免费在线欧美视频| 日本a在线天堂| 伊人成综合网yiren22| 国产精品视频大全| 欧美hdxxxx| 亚洲欧美日韩国产中文专区| 911美女片黄在线观看游戏| 亚洲一区二区免费视频| 成人午夜剧场视频网站| 精品综合久久久久久8888| 久久精品国产sm调教网站演员| 国产精品嫩模av在线| 91精品综合久久久久久五月天| 丁香高清在线观看完整电影视频| 亚洲热线99精品视频| av高清一区二区| 色噜噜狠狠色综合中国| 欧美成人手机视频| 国产欧美一区二区精品性色| 日韩精品――色哟哟| 久久精品伊人| www.亚洲视频.com| 日韩精品永久网址| 久久国产精品亚洲va麻豆| 成人国产精品久久| 国产91精品久久久久久久| 国产美女在线观看| 亚洲色图15p| 欧美一区二区公司| 9191成人精品久久| 天堂av免费在线观看| 亚洲国产中文字幕| 91ts人妖另类精品系列| 99精品在线观看视频| 久久6免费视频| 日韩av在线发布| 亚洲熟妇av日韩熟妇在线| 亚洲人metart人体| 亚洲精品成人久久久998| 日韩精选在线| 国产精品视频500部| 亚洲伊人伊成久久人综合网| 国产成人精品日本亚洲专区61| 男女在线视频| 欧美成人在线免费| 欧美成人高清在线| 一区二区欧美久久| 日本人妖在线| 亚洲国产一区二区三区在线观看 | 精品国产sm最大网站| 91精品中文字幕| 欧美亚洲综合久久| 亚洲欧美偷拍视频| 亚洲成人精品影院| 国产亚洲精品久久久久久无几年桃| 国产精品狼人久久影院观看方式| b站大片免费直播| 91丨九色porny丨蝌蚪| 日本人添下边视频免费| 成人午夜碰碰视频| 极品白嫩少妇无套内谢| 国产剧情在线观看一区二区| 国产一区二区在线观看免费视频| 麻豆久久一区二区| 中文字幕网av| 精品一区中文字幕| 小明看看成人免费视频| 另类小说视频一区二区| 日韩欧美国产片| 久久精品国产精品亚洲精品| 色多多视频在线播放| 日韩黄色片在线观看| 国产裸体免费无遮挡| 麻豆9191精品国产| 久久九九国产视频| 青青草成人在线观看| 第四色婷婷基地| 国产一区免费电影| 日本50路肥熟bbw| 99国产精品视频免费观看| 黄色正能量网站| 国产欧美视频一区二区三区| 少妇的滋味中文字幕bd| 中文字幕亚洲视频| 顶臀精品视频www| 亚洲国产三级在线| 国产高潮久久久| 欧美在线免费视屏| 97caocao| 亚洲精品在线网站| 日本一区视频| 中文字幕欧美国内| 羞羞的视频在线观看| 2019av中文字幕| 精品视频在线一区二区在线| 国产在线999| 99精品在免费线中文字幕网站一区| 精品国产一区二区三区麻豆小说| 伊人久久大香线蕉无限次| 亚洲成人午夜在线| 午夜亚洲福利| 男人天堂999| 久久精品国产秦先生| 亚洲欧洲国产视频| 国产调教视频一区| 久久机热这里只有精品| 欧美午夜精品久久久久久浪潮| 特级西西444www高清大视频| 日韩区在线观看| 久蕉在线视频| 欧美裸身视频免费观看| 成人影院大全| 91在线免费看网站| 无码日韩精品一区二区免费| 中文字幕日韩精品久久| 99亚洲视频| 久久久久久久久久一区| 99精品视频在线观看| 精品国产国产综合精品| 婷婷开心激情综合| 一级片视频免费| 亚洲精品一区二区网址| 二区在线播放| 国产精品福利久久久| 最新国产精品精品视频| 亚洲精品一区国产精品| 在线看片欧美| 日本高清免费在线视频| 久久欧美中文字幕| 久久综合色综合| 在线播放日韩导航| 国产毛片在线看| 久久人人爽人人爽人人片av高请 | 久久精品—区二区三区舞蹈 | 大陆极品少妇内射aaaaaa| 久久久噜噜噜| 中文字幕一区二区三区乱码不卡| 中文字幕五月欧美| 瑟瑟视频在线免费观看| 日韩精品在线观| 成人三级小说| 99久久99久久| 亚洲电影影音先锋| 日本人视频jizz页码69| 久久精品一区蜜桃臀影院| 国产在线综合网| 欧美一级高清片在线观看| 性开放的欧美大片| 国产成人精品久久二区二区| 国语一区二区三区| 久久av高潮av| 国产一区二区女| 国精产品久拍自产在线网站| 91成人免费网站| 欧美日韩伦理片| 51ⅴ精品国产91久久久久久| 风间由美性色一区二区三区四区| 狠狠精品干练久久久无码中文字幕| 日韩制服丝袜先锋影音| www.久久国产| 欧美日韩亚洲成人| 性xxxx搡xxxxx搡欧美| 久久理论片午夜琪琪电影网| silk一区二区三区精品视频| 热久久最新网址| 国产成人在线视频网址| 欧美黄色免费看| 精品国产乱码久久久久久蜜臀 | 又大又长粗又爽又黄少妇视频| 亚洲视频精选在线| 国产又爽又黄又嫩又猛又粗| 色吧影院999| 久久久久亚洲精品中文字幕| 蜜臀在线免费观看| 国产成人精品免费网站| 久久精品www| 亚洲国产成人91精品| 黄视频网站在线观看| 久久久久久久久四区三区| 亚洲中字在线| 9.1成人看片免费版| 91高清在线观看| 日日夜夜精品一区| 91传媒视频免费| 亚洲看片一区| 国产成人无码精品久久二区三| 欧美优质美女网站| 里番在线观看网站| 不卡视频一区| 一区二区三区四区五区在线| 大又大又粗又硬又爽少妇毛片| 欧美亚洲动漫制服丝袜| 精品欧美色视频网站在线观看| 成人动漫视频在线观看完整版| 在线欧美福利| 国产成人福利在线| 69p69国产精品| 24小时免费看片在线观看| 欧美黑人3p| 麻豆成人91精品二区三区| 好吊色视频在线观看| 日韩av有码在线| 国产精品videossex撒尿| 免费观看国产视频在线| 99久久精品免费看国产| 波多野结衣网站| 欧美大肥婆大肥bbbbb| 色综合www| 99国产精品久久久久久| 亚洲一区在线播放| 国产女主播在线直播| 亚洲综合av影视| 久久久久久自在自线| wwwav国产| 亚洲色图15p| 国产精品qvod| 小明看看成人免费视频| 欧美日韩一区二区三区 | 久久综合欧美| 日本中文字幕在线不卡| 色香蕉久久蜜桃| 国模雨婷捆绑高清在线| 亚洲高清在线播放|