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

React 核心團(tuán)隊(duì)成員解釋“代數(shù)效應(yīng)與 React”

新聞 前端
React核心團(tuán)隊(duì)成員Sebastian Markbåge[1](React Hooks的發(fā)明者)曾說:我們在React中做的就是踐行代數(shù)效應(yīng)(Algebraic Effects)。

 React核心團(tuán)隊(duì)成員Sebastian Markbåge[1](React Hooks的發(fā)明者)曾說:我們在React中做的就是踐行代數(shù)效應(yīng)(Algebraic Effects)。

那么,代數(shù)效應(yīng)是什么呢?它和React有什么關(guān)系呢。

[[345619]]

什么是代數(shù)效應(yīng)

代數(shù)效應(yīng)是函數(shù)式編程中的一個概念,用于將副作用從函數(shù)調(diào)用中分離。

接下來我們用虛構(gòu)的語法來解釋。

假設(shè)我們有一個函數(shù)getTotalPicNum,傳入2個用戶名稱后,分別查找該用戶在平臺保存的圖片數(shù)量,最后將圖片數(shù)量相加后返回。

  1. function getTotalPicNum(user1, user2) { 
  2.  
  3.   const num1 = getPicNum(user1); 
  4.  
  5.   const num2 = getPicNum(user2); 
  6.  
  7.   return picNum1 + picNum2; 
  8.  

在getTotalPicNum中,我們不關(guān)注getPicNum的實(shí)現(xiàn),只在乎“獲取到兩個數(shù)字后將他們相加的結(jié)果返回”這一過程。

接下來我們來實(shí)現(xiàn)getPicNum。

"用戶在平臺保存的圖片數(shù)量"是保存在服務(wù)器中的。所以,為了獲取該值,我們需要發(fā)起異步請求。

為了盡量保持getTotalPicNum的調(diào)用方式不變,我們首先想到了使用async await:

  1. async function getTotalPicNum(user1, user2) { 
  2.  
  3.   const num1 = await getPicNum(user1); 
  4.  
  5.   const num2 = await getPicNum(user2); 
  6.  
  7.   return picNum1 + picNum2; 
  8.  

但是,async await是有傳染性的 —— 當(dāng)一個函數(shù)變?yōu)閍sync后,這意味著調(diào)用他的函數(shù)也需要是async,這破壞了getTotalPicNum的同步特性。

有沒有什么辦法能保持getTotalPicNum保持現(xiàn)有調(diào)用方式不變的情況下實(shí)現(xiàn)異步請求呢?

沒有。不過我們可以虛構(gòu)一個。

我們虛構(gòu)一個類似try...catch的語法 —— try...handle與兩個操作符perform、resume。

  1. function getPicNum(name) { 
  2.  
  3.   const picNum = perform name; 
  4.  
  5.   return picNum; 
  6.  
  7.  
  8. try { 
  9.  
  10.   getTotalPicNum('kaSong''xiaoMing'); 
  11.  
  12. } handle (who) { 
  13.  
  14.   switch (who) { 
  15.  
  16.     case 'kaSong'
  17.  
  18.       resume with 230
  19.  
  20.     case 'xiaoMing'
  21.  
  22.       resume with 122
  23.  
  24.     default
  25.  
  26.       resume with 0
  27.  
  28.   } 
  29.  

當(dāng)執(zhí)行到getTotalPicNum內(nèi)部的getPicNum方法時,會執(zhí)行perform name。

此時函數(shù)調(diào)用棧會從getPicNum方法內(nèi)跳出,被最近一個try...handle捕獲。類似throw Error后被最近一個try...catch捕獲。

類似throw Error后Error會作為catch的參數(shù),perform name后name會作為handle的參數(shù)。

與try...catch最大的不同在于:當(dāng)Error被catch捕獲后,之前的調(diào)用棧就銷毀了。而handle執(zhí)行resume后會回到之前perform的調(diào)用棧。

對于case 'kaSong',執(zhí)行完resume with 230;后調(diào)用棧會回到getPicNum,此時picNum === 230

再次申明,try...handle的語法是虛構(gòu)的,只是為了演示代數(shù)效應(yīng)的思想。

總結(jié)一下:代數(shù)效應(yīng)能夠?qū)⒏弊饔茫ɡ又袨檎埱髨D片數(shù)量)從函數(shù)邏輯中分離,使函數(shù)關(guān)注點(diǎn)保持純粹。

并且,從例子中可以看出,perform resume不需要區(qū)分同步異步。

代數(shù)效應(yīng)在React中的應(yīng)用

那么代數(shù)效應(yīng)與React有什么關(guān)系呢?最明顯的例子就是Hooks。

對于類似useState、useReducer、useRef這樣的Hook,我們不需要關(guān)注FunctionComponent的state在Hook中是如何保存的,React會為我們處理。

我們只需要假設(shè)useState返回的是我們想要的state,并編寫業(yè)務(wù)邏輯就行。

  1. function App() { 
  2.  
  3.   const [num, updateNum] = useState(0); 
  4.  
  5.    
  6.  
  7.   return ( 
  8.  
  9.     <button onClick={() => updateNum(num => num + 1)}>{num}</button>   
  10.  
  11.   ) 
  12.  

如果這個例子還不夠明顯,可以看看官方的Suspense Demo[2]

在Demo中ProfileDetails用于展示用戶名稱。而用戶名稱是異步請求的。

但是Demo中完全是同步的寫法。

  1. function ProfileDetails() { 
  2.  
  3.   const user = resource.user.read(); 
  4.  
  5.   return <h1>{user.name}</h1>; 
  6.  

代數(shù)效應(yīng)與Generator

從React15到React16,協(xié)調(diào)器(Reconciler)重構(gòu)的一大目的是:將老的同步更新的架構(gòu)變?yōu)楫惒娇芍袛喔隆?/p>

異步可中斷更新可以理解為:更新在執(zhí)行過程中可能會被打斷(瀏覽器時間分片用盡或有更高優(yōu)任務(wù)插隊(duì)),當(dāng)可以繼續(xù)執(zhí)行時恢復(fù)之前執(zhí)行的中間狀態(tài)。

這就是代數(shù)效應(yīng)中try...handle的作用。

其實(shí),瀏覽器原生就支持類似的實(shí)現(xiàn),這就是Generator。

但是Generator的一些缺陷使React團(tuán)隊(duì)放棄了他:

類似async,Generator也是傳染性的,使用了Generator則上下文的其他函數(shù)也需要作出改變。這樣心智負(fù)擔(dān)比較重。

Generator執(zhí)行的中間狀態(tài)是上下文關(guān)聯(lián)的。

考慮如下例子:

  1. function* doWork(A, B, C) { 
  2.  
  3.   var x = doExpensiveWorkA(A); 
  4.  
  5.   yield; 
  6.  
  7.   var y = x + doExpensiveWorkB(B); 
  8.  
  9.   yield; 
  10.  
  11.   var z = y + doExpensiveWorkC(C); 
  12.  
  13.   return z; 
  14.  

每當(dāng)瀏覽器有空閑時間都會依次執(zhí)行其中一個doExpensiveWork,當(dāng)時間用盡則會中斷,當(dāng)再次恢復(fù)時會從中斷位置繼續(xù)執(zhí)行。

只考慮“單一優(yōu)先級任務(wù)的中斷與繼續(xù)”情況下Generator可以很好的實(shí)現(xiàn)異步可中斷更新。

但是當(dāng)我們考慮“高優(yōu)先級任務(wù)插隊(duì)”的情況,如果此時已經(jīng)完成doExpensiveWorkA與doExpensiveWorkB計(jì)算出x與y。

此時B組件接收到一個高優(yōu)更新,由于Generator執(zhí)行的中間狀態(tài)是上下文關(guān)聯(lián)的的,所以重新計(jì)算y時無法復(fù)用之前已經(jīng)計(jì)算出的x,需要重新計(jì)算。

如果通過全局變量保存之前執(zhí)行的中間狀態(tài),又會引入新的復(fù)雜度。

更詳細(xì)的解釋可以參考這個issue[3]

基于這些原因,React沒有采用Generator實(shí)現(xiàn)協(xié)調(diào)器。

代數(shù)效應(yīng)與Fiber

Fiber并不是計(jì)算機(jī)術(shù)語中的新名詞,他的中文翻譯叫做纖程,與進(jìn)程(Process)、線程(Thread)、協(xié)程(Coroutine)同為程序執(zhí)行過程。

在很多文章中將纖程理解為協(xié)程的一種實(shí)現(xiàn)。在JS中,協(xié)程的實(shí)現(xiàn)便是Generator。

所以,我們可以將纖程(Fiber)、協(xié)程(Generator)理解為代數(shù)效應(yīng)思想在JS中的體現(xiàn)。

React Fiber可以理解為:

React內(nèi)部實(shí)現(xiàn)的一套狀態(tài)更新機(jī)制。支持任務(wù)不同優(yōu)先級,可中斷與恢復(fù),并且恢復(fù)后可以復(fù)用之前的中間狀態(tài)。

其中每個任務(wù)更新單元為React Element對應(yīng)的Fiber節(jié)點(diǎn)。

 

責(zé)任編輯:張燕妮 來源: 程序員的那些事
相關(guān)推薦

2023-07-22 00:33:07

React團(tuán)隊(duì)數(shù)據(jù)

2021-05-24 06:00:20

ReactJSXJS

2020-01-07 15:40:43

React前端技術(shù)準(zhǔn)則

2023-02-02 08:41:14

React團(tuán)隊(duì)Vite

2023-03-24 12:34:56

2022-06-27 07:23:20

React?并發(fā)

2022-07-06 15:07:47

React開發(fā)

2020-11-24 07:48:32

React

2022-08-22 16:23:11

React特性

2015-10-10 16:02:36

React NativAndroid

2022-05-06 07:31:01

useEventReactHook

2022-10-29 08:55:19

頁面react

2023-05-31 07:29:46

2021-12-16 06:21:16

React組件前端

2022-04-15 08:07:21

ReactDiff算法

2021-10-15 14:28:30

React 組件渲染

2023-03-19 11:42:19

React新官方文檔

2025-07-01 00:00:00

2020-10-23 09:26:57

React-Redux

2021-02-02 08:11:50

火焰圖組件技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

caopeng视频| 精品视频在线观看一区二区| 中文字幕一区二区三区免费看| 成人在线国产| 日韩一级片在线播放| 成人在线国产视频| 搞黄视频在线观看| 国产一区二区三区在线观看免费视频 | 久久精品一本久久99精品| 一区二区三区人妻| 中老年在线免费视频| 亚洲欧美综合色| 久久久精品国产一区二区三区| 波多野结衣在线观看一区| 欧美黄色精品| 国产亚洲综合久久| 麻豆短视频在线观看| 亚洲精品粉嫩美女一区| 亚洲一二三区不卡| 亚洲精品一卡二卡三卡四卡| 无码国产伦一区二区三区视频 | 欧亚精品在线观看| 日本黄色片免费观看| 亚洲免费福利一区| 日韩欧美你懂的| 成人免费在线观看视频网站| 丰满的护士2在线观看高清| 欧美激情在线一区二区三区| 国产尤物99| 国产成人精品av在线观| 日韩电影免费一区| 456亚洲影院| 国语对白一区二区| 午夜国产一区| 久久精品久久久久久国产 免费| 泷泽萝拉在线播放| 精品网站aaa| 日韩欧美在线一区二区三区| 亚洲精品久久久中文字幕| 中文在线а√在线8| 亚洲制服丝袜av| 国产欧美综合一区| 免费**毛片在线| 国产精品五月天| 国产欧美日韩一区二区三区| 精品人妻一区二区三区蜜桃| 久久99九九99精品| 国产成人在线一区| 久久精品视频2| 日韩精品午夜视频| 国产成人高潮免费观看精品| 国产成人一级片| 99视频精品| 国内精品久久久久影院 日本资源| 久久久久亚洲av无码专区体验| 91精品秘密在线观看| 久久久精品美女| a在线视频播放观看免费观看| 99精品综合| 日韩亚洲欧美成人| 911国产在线| 影音先锋成人在线电影| 成人444kkkk在线观看| 麻豆视频在线免费看| 欧美精品导航| 国产+成+人+亚洲欧洲| 偷偷操不一样的久久| 性色一区二区三区| 日本一区二区在线免费播放| 国产成人无码av| 日本欧美在线看| 成人激情视频小说免费下载| 国产三级精品在线观看| 国产精品88888| 精品无人区一区二区三区| 午夜成人免费影院| 欧美激情一区二区三区| 资源网第一页久久久| av免费网站在线观看| 午夜精品国产更新| 日韩免费高清在线| 成人噜噜噜噜| 欧美精品一区二| 成人在线一级片| 天天综合久久| 久久人人爽人人| 中文字幕69页| 国产一区在线不卡| 国产精品日韩欧美一区二区三区| 天堂影院在线| 中文字幕一区二区三区蜜月| 天堂а√在线中文在线| 免费在线小视频| 欧美性色黄大片| 欧美人与性动交α欧美精品| 日韩中出av| 日韩在线观看免费高清完整版| 久久综合加勒比| 日韩av在线播放中文字幕| 成人精品在线观看| 同心难改在线观看| 国产欧美日韩精品a在线观看| 亚洲精品中文字幕乱码三区不卡| 激情在线视频播放| 色伊人久久综合中文字幕| 91网址在线观看精品| 少妇高潮一区二区三区| 久久成人精品视频| 久操视频在线免费观看| 国产suv精品一区二区883| 麻豆精品传媒视频| 怡红院在线播放| 欧美在线综合视频| 免费黄色三级网站| 亚洲国产一区二区三区在线播放| 国产福利精品av综合导导航| 免费观看a视频| 综合网在线视频| 天天摸天天碰天天添| 亚洲精选av| 按摩亚洲人久久| 亚洲不卡在线视频| 99久久婷婷国产综合精品电影| 制服丝袜综合日韩欧美| 高清av一区二区三区| 日韩国产精品一区| 久一视频在线观看| 国产一区二区精品久久91| 神马影院一区二区| 国产精品专区免费| 亚洲精品99久久久久| 欧产日产国产v| 精品一区二区三区免费毛片爱| 日韩av在线一区二区三区| 欧美aa在线| 亚洲成人精品视频| 国产一级在线免费观看| 国产成人精品免费看| 自拍偷拍一区二区三区| 青娱乐极品盛宴一区二区| 国产一区二区三区直播精品电影| 国产剧情在线视频| 91麻豆精品在线观看| 婷婷五月综合缴情在线视频| 国产精品亚洲一区二区在线观看| 日韩亚洲欧美成人| 国产理论视频在线观看| 国产精品久久久一区麻豆最新章节| 精品久久久久久久无码| 国产欧美亚洲精品a| 日韩av手机在线观看| 欧美日韩免费做爰大片| 色综合久久综合网| 欧美 日韩 成人| 日本午夜一区二区| 国产91av视频在线观看| 日韩黄色在线| 久久综合久久八八| 不卡av中文字幕| 亚洲国产va精品久久久不卡综合| 国产女主播在线播放| 亚洲大黄网站| 蜜桃网站成人| 伊人久久高清| 中文字幕av日韩| 国产精品国产三级国产aⅴ| 亚洲人成人一区二区在线观看 | 日韩在线免费视频| 国产一区二区三区视频免费观看| 亚洲天堂精品视频| 亚洲av综合色区无码另类小说| 韩日精品在线| 欧美日韩精品一区| 日韩专区视频| 久久精品国产久精国产一老狼| 99久久精品国产成人一区二区| 一区二区三区精品在线| 老司机免费视频| 玖玖视频精品| 中文字幕久久一区| 99re8这里有精品热视频8在线| 2018日韩中文字幕| a√在线中文网新版址在线| 欧美二区在线观看| 日韩三级免费看| 欧美激情一区二区三区全黄| 原创真实夫妻啪啪av| 国产视频一区三区| 一区二区三区四区视频在线观看| 久久69av| 国产aⅴ夜夜欢一区二区三区| 国产区在线观看| 日韩久久精品成人| 国产精品国产三级国产aⅴ| 天天射综合影视| 久久成人小视频| 99热这里都是精品| 黄色小视频免费网站| 亚洲精品少妇| 一区二区三区欧美成人| 理论片一区二区在线| 国产精品中文久久久久久久| 成人福利电影| 久久精品国产91精品亚洲| 天堂影院在线| 精品国产青草久久久久福利| 黄色大全在线观看| 午夜久久久久久久久| 波多野结衣在线网址| 久久亚洲影视婷婷| 人妻互换一二三区激情视频| 欧美a一区二区| 人妻av中文系列| 亚洲女同中文字幕| 日韩精品不卡| 日韩伦理一区二区三区| 91|九色|视频| 日韩成人精品一区二区三区| 欧美一级大片在线免费观看| 性欧美ⅴideo另类hd| 中文字幕精品www乱入免费视频| 婷婷在线免费观看| 日韩亚洲电影在线| 亚洲综合精品在线| 在线亚洲一区观看| av中文在线播放| 亚洲va天堂va国产va久| 国产一区二区三区在线视频观看| 日本一二三不卡| 久久久亚洲av波多野结衣| 国产不卡在线播放| 91 视频免费观看| 日本不卡一区二区三区| 久久精品视频91| 国产亚洲午夜| 内射国产内射夫妻免费频道| 国内综合精品午夜久久资源| 欧美精品一区二区性色a+v| 日韩一区二区在线| 欧美一卡2卡3卡4卡无卡免费观看水多多| 成人福利一区| 国产精品一区视频网站| av日韩精品| 国产经典一区二区三区| 亚洲一区二区三区中文字幕在线观看 | 日韩高清av在线| 黄色av小说在线观看| 欧美大片一区二区| 亚洲AV午夜精品| 日韩欧美一区二区三区在线| av av片在线看| 欧美一级xxx| 亚洲爱爱综合网| 亚洲精品久久7777777| 日本高清视频网站| 亚洲精品美女久久| 青青草娱乐在线| 国产亚洲精品美女久久久| 中文字幕不卡av| 在线免费黄色av| 精品欧美国产一区二区三区| 青青操免费在线视频| 精品国产91乱高清在线观看| 国产www在线| 在线观看网站黄不卡| 国语对白做受69按摩| 欧美视频日韩视频在线观看| 中国女人真人一级毛片| 欧美精品在线观看播放| 精品人妻伦一二三区久久| 欧美电影精品一区二区| 人妻无码中文字幕| 亚洲女成人图区| 99视频在线观看地址| 欧美成在线观看| 成入视频在线观看| 日韩男女性生活视频| 国产成人精品一区二区三区免费| 91精品综合视频| 成人爽a毛片免费啪啪红桃视频| 精品一区二区国产| 精品视频免费在线观看| 小说区视频区图片区| 激情久久久久| 成人免费无码av| 韩国成人在线视频| 国产精品麻豆入口| 中文字幕第一区第二区| 69av视频在线| 一本久久精品一区二区| 一卡二卡在线观看| 亚洲精品美女久久久| 午夜在线小视频| 孩xxxx性bbbb欧美| 日韩毛片在线| 国产精成人品localhost| 国产亚洲欧美日韩在线观看一区二区| 亚洲一区二三| 国产欧美激情| 久久久精品视频国产| 91视频在线观看免费| 亚洲国产精品99| 啦啦啦免费高清视频在线观看| 欧美日韩视频一区二区| 免费观看成年人视频| 中文在线不卡视频| 在线手机中文字幕| 97免费资源站| 久久密一区二区三区| a√天堂在线观看| 国产精品1区2区3区在线观看| 91久久免费视频| 亚洲国产综合人成综合网站| 亚洲午夜在线播放| 亚洲激情成人网| av电影免费在线观看| 国产精彩精品视频| 欧美人妖在线观看| 日本精品福利视频| 久久国产人妖系列| 日韩一级av毛片| 欧美日韩国产精品专区| av网站在线观看免费| 中文字幕成人在线| 怡红院成人在线| 久久久人人爽| 在线欧美不卡| 台湾佬美性中文| 亚洲男同性恋视频| 国产一区二区三区三州| 中文字幕在线看视频国产欧美| 中文字幕成在线观看| 国产伦精品一区二区三区免费视频| 色中色综合网| 亚洲最大综合网| 国产亚洲综合色| 国产亚洲欧美在线精品| 亚洲黄色有码视频| 51精品视频| 国产精品对白刺激久久久| 伊人青青综合网| 超碰在线超碰在线| 亚洲欧美自拍偷拍| 在线视频你懂得| www.久久久久| 亚洲一区二区小说| 久久久高清一区二区三区| 肉色超薄丝袜脚交| 亚洲视频 欧洲视频| 国产一区二区三区视频免费观看| 中文字幕日韩有码| 国产成人精选| 黄色免费高清视频| 国产一区二区在线观看视频| 在线观看美女av| 日韩亚洲欧美成人一区| 四虎av在线| 国产精品久久国产精品| 一区视频在线看| 亚洲精品女人久久久| 欧美性高跟鞋xxxxhd| 极品白浆推特女神在线观看| 热99在线视频| 成人久久电影| 亚洲欧美天堂在线| 亚洲精品高清在线观看| 丰满熟女一区二区三区| 韩国19禁主播vip福利视频| 免费福利视频一区| av无码精品一区二区三区| 国产精品电影院| 国产情侣av在线| 91精品国产777在线观看| 一区二区三区视频免费观看| 国产精品入口免费软件| 国产精品国产三级国产aⅴ中文| 国产精品熟女久久久久久| 欧美高清在线观看| 日韩伦理一区二区三区| 人人干人人干人人| 一区二区三区波多野结衣在线观看 | 久久久久无码精品| 五月天视频一区| 国产精品影院在线| 亚洲尤物视频网| 国产欧美短视频| 性色国产成人久久久精品| 日韩欧美激情在线| 亚洲男人av| 法国空姐在线观看免费| 欧美激情影院| 久久久久亚洲精品国产| 日韩精品免费一区二区夜夜嗨| 黄色三级视频在线| 一区二区高清视频在线观看| 免费在线黄色电影| 91久久国产精品91久久性色| 国产亚洲欧洲| 粉嫩av性色av蜜臀av网站| 精品亚洲一区二区|