成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

以后沒有 React Concurrent Mode了

開發 前端
相信很多關注React的朋友都知道Concurrent Mode,他是React漸進升級策略的產物。本文讓我們一起了解React漸進升級策略的演進過程。

[[435400]]

大家好,我卡頌。

相信很多關注React的朋友都知道Concurrent Mode,他是React漸進升級策略的產物。

即然是策略,那就有可能調整,這不,根據What happened to concurrent mode?[1],在v18中將不會有Concurrent Mode了。

本文讓我們一起了解React漸進升級策略的演進過程。

React新老架構的區別

可以認為采用Fiber架構前的React只支持一種優先級:同步優先級,即所有更新是“同步、不可中斷”的形式。

采用Fiber架構后的React支持包括同步優先級在內的多種優先級,或者說新架構支持并發更新。

所以新架構可以模擬老架構的運行機制(即不開啟并發更新)。

當新架構開啟并發更新后,就能使用React為了解決CPU的瓶頸、IO的瓶頸而設計的并發特性(Concurrent Feature),比如:

  • useDeferredValue
  • useTransition
  • 全功能的Suspense

React所有版本可能的情況

當前所有React版本一定屬于如下情況之一:

  1. v15及之前的老架構
  2. v16之后的新架構,未開啟并發更新,與情況1行為一致
  3. v16之后的新架構,未開啟并發更新,但是啟用了一些新功能(比如Automatic Batching)
  4. v16之后的新架構,開啟并發更新

v16、v17默認屬于情況2。

之所以劃分多種情況,是因為情況4的React一些行為異于情況1、2、3(比如部分以componentWill開頭的生命周期函數的調用時機發生變化),也就是說開啟并發更新可能造成老代碼不兼容。

為了讓廣大開發者能夠平滑過渡,React團隊采用了「漸進升級」方案。

早期的漸進升級策略

v16.3新增了StrictMode,對開發者編寫的「不符合并發更新規范的代碼」作出提示,逐步引導開發者寫出規范代碼。

此時React團隊的「漸進升級」策略是:讓頁面中可以同時存在三種模式的應用,具體如下:

  1. Legacy模式,通過ReactDOM.render(, rootNode)創建的應用遵循該模式。默認關閉StrictMode,表現同情況2
  2. Blocking模式,通過ReactDOM.createBlockingRoot(rootNode).render()創建的應用遵循該模式,作為從Legacy向Concurrent過渡的中間模式,默認開啟StrictMode,表現同情況3
  3. Concurrent模式,通過ReactDOM.createRoot(rootNode).render()創建的應用遵循該模式,默認開啟StrictMode,表現同情況4

三種模式可用特性對比

在v17之前,大多數事件會冒泡到HTML元素,為了讓同一個頁面下不同應用獨立,v17之后事件會冒泡到應用所在根元素。

所以v17也被稱為「墊腳石」版本,他是為「開啟并發更新」做鋪墊的版本。

當前的漸進升級策略

但是,根據社區的反饋,React團隊意識到當前的「漸進升級」策略存在問題。

這三種模式影響的是整個應用,從Legacy升級到Blocking后,由于開啟StrictMode,整個應用的「并發不兼容警告」都會上報。從這個角度看,并沒有起到「漸進升級」的目的。

另一方面,開發者從新架構中獲益更多是由于使用了并發特性,即然新架構支持「開關并發更新」,完全可以在使用了并發特性后再開啟并發更新。這樣就只需在「使用了并發特性的組件」部分啟用StrictMode。

相比劃分三種模式,這種以「是否使用并發特性」作為是否開啟并發更新的依據,更符合「漸進升級」中「漸進」的理念。

所以在v18中,不再有三種模式,統一使用ReactDOM.createRoot(rootNode).render()創建應用。當不使用并發特性時,表現如情況3。使用并發特性后,表現如情況4。

總結

一句話總結:v18以后只會有并發特性,不會有并發模式。

作為一個發展了8年之久的前端框架,要想推進社區完成帶有breaking change的迭代升級,注定是困難的。

我們也看到了React團隊在此確實付出很多心血。

想問問各位,還學得動么?

參考資料

[1]What happened to concurrent mode?:

https://github.com/reactwg/react-18/discussions/64

 

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2020-11-06 13:25:38

React Concu

2019-04-15 14:17:28

iTunes蘋果macOS

2023-05-11 08:13:01

ReactCanary版本

2022-03-02 15:10:31

DateJavaScript前端

2011-03-15 09:10:48

Concurrent

2024-07-08 00:00:07

2020-10-19 10:25:57

ReactReact.js前端

2021-09-29 07:41:27

前端技術編程

2018-10-23 14:50:24

Linux操作系統Linus

2021-03-03 10:54:41

2021-11-30 07:31:42

微信支付寶付款

2022-07-13 15:23:57

Vue fiberreact前端

2022-12-13 10:37:45

數字化預測

2022-05-16 08:00:55

ReactReact 18數組

2015-10-15 15:02:48

2016-06-12 16:04:03

機器人編劇

2022-03-25 08:31:09

ReactReact 18升級

2019-04-02 10:39:42

WiFiLiFi5G

2022-03-11 10:23:02

React性能優化

2023-05-26 06:30:56

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热在线视频免费观看 | 国产成人精品视频在线观看 | 中文字幕在线观看一区 | 91在线精品一区二区 | 国产成人一区二区三区久久久 | 久久夜视频| 亚洲精品在线看 | 国产精品视频导航 | 国产一区二区不卡 | 日日日日操 | av一区二区三区四区 | 九九免费在线视频 | 国产精品中文字幕在线 | 精品国产一区二区三区久久久蜜月 | 日韩在线观看精品 | 久久99深爱久久99精品 | 国产综合在线视频 | 自拍视频在线观看 | 午夜精品久久久久久久 | 草草视频在线观看 | 亚洲永久 | 99亚洲综合 | 在线播放国产一区二区三区 | 亚洲视频在线免费 | 亚洲三区视频 | 国产亚洲一区在线 | 欧美日韩高清一区二区三区 | 人人澡人人射 | 国产成都精品91一区二区三 | 日本电影网站 | 国产jizz女人多喷水99 | 91 中文字幕 | 超碰97人人人人人蜜桃 | 日日日日日日bbbbb视频 | 亚洲一二三在线观看 | 国产欧美性成人精品午夜 | 精品亚洲一区二区 | 99小视频| 国产精品夜夜夜一区二区三区尤 | 国产成人一区二区 | 91精品亚洲 |