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

聊聊 React 18 對 Hooks 的影響

開發 前端
在 ahooks 中的 useUnmountedRef、useSafeState等都是為了解決這個警告而生的。同時我們在 ahooks 中必要的地方,為了避免這個告警,也會在組件卸載后,忽略后續的 setState。

一、 譯者前言

最近 React 18 發布后,部分改動對我們使用 React Hooks 有一些影響。這篇文章對官方的文檔 Update to remove the "setState on unmounted component warning"[1] 做了翻譯,好讓大家清晰的認識到這個改動的背景和影響。這是 React 18 對 Hooks 的影響系列第一篇,后面我還會整理其它有影響的改動。

二、 翻譯

1、 背景

之前在已經卸載的組件中調用 setState時,會有一個警告,本次我們將這個警告移除了。警告內容如下:

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function。

警告:不能在已經卸載的組件中更改 state。這是一個無用的操作,它表明你的項目中存在內存泄漏。要解決這個問題,請在 useEffect 清理函數中取消所有訂閱和異步任務。

不幸的是,這個警告經常被誤解,并且會誤導大家。

它原本是想保證如下示例能正常工作的:

useEffect(() => {
function handleChange() {
setState(store.getState())
}
store.subscribe(handleChange)
return () => store.unsubscribe(handleChange)
}, [])

在這個例子中,如果你忘記了在 effect 清理函數中調用 unsubscribe,那肯定是有內存泄漏的。

2、 為什么說這個警告會誤導大家呢?

事實上,上面的場景并不常見。反而如下場景是更常見的:

async function handleSubmit() {
setPending(true)
await post('/someapi') // component might unmount while we're waiting
setPending(false)
}

在上面的代碼中,如果發送請求時,組件卸載了,會拋出警告。但是,在這種場景下,警告誤導了大家。

這里其實沒有內存泄漏:

  • Promise 會很快完成執行,然后內存被垃圾回收機制回收。
  • 即使沒有很快完成執行,這個警告也是沒用的,因為垃圾回收也還是得等 Promise 執行完回收,你啥也不能做。

一般,我們會通過如下代碼來消除警告:

let isMountedRef = useRef(false)
useEffect(() => {
isMountedRef.current = true
return () => {
isMountedRef.current = false
}
}, [])
async function handleSubmit() {
setPending(true)
await post('/someapi')
if (!isMountedRef.current) {
setPending(false)
}
}

實際上,這種寫法是沒用的,并沒有解決所謂的“內存泄漏”,它僅僅只是抑制了警告。正如前面說的,這里其實是沒有內存泄漏的。內存會隨著 Promise 執行完而釋放,并沒有什么在無限執行。

3、 上述抑制警告方案比不處理更糟糕

上述抑制警告的解決方案,現在非常非常普遍。但它其實沒任何好處,反而比不處理更糟糕:

  • 未來,React 會提供一個新能力,在組件卸載不可見時,我們會保存組件現在的 state,但仍會卸載組件。下次加載組件的時候,我們會用之前保存的 state 來渲染組件,以便恢復之前的頁面。在組件卸載之后,setPending(false)不會被執行到,所以 pending會一直是 true,那下次恢復組件的時候,看起來是請求沒有執行完成,會變的更糟糕。(譯者注:關于這一塊詳細的行為和影響面,下一篇文章介紹)。
  • 假設用戶點擊一個按鈕,發起一個網絡請求,請求結束后更新 state。為了避免這個警告,有些人會將請求行為放到 useEffect 中,因為在 useEffect 中可以監聽到組件卸載,以忽略后續的 state 更新,消除警告。這樣代碼變的非常不清晰,非常糟糕!就是因為這個錯誤的警告,會讓大家寫出更爛的代碼。

4、 移除警告

最終,我們決定移除這個警告。這個警告想解決的訂閱問題,在日常代碼中并不常見。大部分情況下,它反而會誤導大家,為了避免告警寫出更爛的代碼。希望這個警告的移除,可以讓你移除代碼中的 isMounted。

三、 譯者總結

在 ahooks 中的 useUnmountedRef[2]、useSafeState[3] 等都是為了解決這個警告而生的。同時我們在 ahooks 中必要的地方,為了避免這個告警,也會在組件卸載后,忽略后續的 setState。

目前來看,這些代碼是多余的,后續 ahooks 會陸續優化相關場景,但不會太快。因為在 react 16、17 中這個告警仍然會有,會對新人造成不必要的困擾。我們會等 React 18 覆蓋面比較廣之后,再進行代碼優化。

以后在代碼中大家應該不需要再考慮這個告警了,不需要再使用 useUnmountedRef[4]、useSafeState[5] 等 Hooks 了。

參考資料

[1]Update to remove the setState on unmounted component warning: https://github.com/reactwg/react-18/discussions/82。

[2]useUnmountedRef: https://ahooks.js.org/hooks/use-unmounted-ref。

[3]useSafeState: https://ahooks.js.org/hooks/use-safe-state。

[4]useUnmountedRef: https://ahooks.js.org/hooks/use-unmounted-ref。

[5]useSafeState: https://ahooks.js.org/hooks/use-safe-state。

責任編輯:姜華 來源: 前端技術磚家
相關推薦

2021-05-11 08:48:23

React Hooks前端

2019-08-20 15:16:26

Reacthooks前端

2023-11-06 08:00:00

ReactJavaScript開發

2020-10-28 09:12:48

React架構Hooks

2024-09-23 14:52:49

2021-03-18 08:00:55

組件Hooks React

2020-09-19 17:46:20

React Hooks開發函數

2022-08-21 09:41:42

ReactVue3前端

2019-03-13 10:10:26

React組件前端

2022-04-16 20:10:00

React Hookfiber框架

2022-04-14 11:50:39

函數組件hook

2022-02-10 19:15:18

React監聽系統模式

2023-05-08 07:52:29

JSXReactHooks

2022-07-18 09:01:58

React函數組件Hooks

2020-08-10 06:31:01

React Hooks前端開發

2022-03-16 22:24:50

ReactstateHooks

2021-11-05 10:36:19

性能優化實踐

2023-04-26 07:46:22

React隱藏彩蛋

2022-06-23 09:04:14

ReactHooks項目

2020-03-16 10:25:49

前端React Hooks響應式布局
點贊
收藏

51CTO技術棧公眾號

国产综合视频一区二区三区免费| 在线能看的av| 9l视频自拍九色9l视频成人| 午夜国产精品一区| 日本免费高清不卡| 国产男男gay体育生白袜| 狠狠噜噜久久| 中文字幕日韩高清| 中文字幕99页| 国产精品亚洲一区二区三区在线观看 | 国内精品久久久| 亚洲一级片在线播放| 7m精品国产导航在线| 欧美在线free| 青娱乐自拍偷拍| 在线激情小视频| 91亚洲精华国产精华精华液| 成人激情视频免费在线| av资源免费观看| 综合久久99| 自拍偷拍亚洲区| 亚洲黄色在线网站| 日韩成人视屏| 欧美日韩精品一区二区三区| 毛片在线视频播放| 青青在线视频| 亚洲日穴在线视频| 亚洲一区二区三区免费看| 国产精品国产高清国产| 国产精品一区二区无线| 国产精品视频一| 国产伦精品一区二区三区视频我| 欧美日韩中文| 欧美成人精品在线播放| 黑人狂躁日本娇小| 欧美日韩高清| 亚洲人成五月天| 日韩精品卡通动漫网站| 欧美1区2区3区4区| 精品国产区一区| 国模大尺度视频| 高清一区二区三区av| 欧美日韩亚洲综合一区| 日韩精品一区二区三区不卡 | 亚洲图片自拍偷拍| 国产精品一区在线免费观看| 国产高清视频在线观看| 久久天天做天天爱综合色| 国产一区二区三区无遮挡 | 亚洲精品国产拍免费91在线| 年下总裁被打光屁股sp| 2023国产精华国产精品| 日韩欧美三级在线| 精品伦一区二区三区| 2021年精品国产福利在线| 精品欧美乱码久久久久久1区2区| www.欧美com| 一区三区自拍| 日韩av最新在线| 中文字幕在线观看的网站| 日韩a级大片| 国产视频亚洲视频| 伊人网在线视频观看| 一本色道久久综合狠狠躁的番外| 亚洲毛片在线观看.| 麻豆av免费观看| 精品日韩在线| y97精品国产97久久久久久| 91免费公开视频| 欧美日韩日本国产亚洲在线| 午夜精品久久久久久99热软件| 日本免费观看视| 久久精品国产清高在天天线| 国产精品久久久久久五月尺| 在线播放一级片| 国产精品1区二区.| 国产偷国产偷亚洲高清97cao| 天天干天天草天天射| 久久久久久9999| 亚洲午夜高清视频| 日日夜夜天天综合入口| 精品久久香蕉国产线看观看亚洲| 亚洲 中文字幕 日韩 无码| 免费视频成人| 精品sm捆绑视频| 国产精品密蕾丝袜| 久久久久电影| 欧美一区二区.| 夜夜嗨av禁果av粉嫩avhd| 国产精品一区二区你懂的| 精品一区二区视频| 亚洲成a人v欧美综合天堂麻豆| 亚洲激情六月丁香| 丁香啪啪综合成人亚洲| 亚洲综合资源| 国产午夜精品麻豆| 性欧美videos| 久久尤物视频| 国产精品播放| 91亚洲精选| 性感美女极品91精品| xxxx一级片| 久久综合另类图片小说| 丝袜情趣国产精品| 天天综合网入口| 国产一区二区三区不卡在线观看| 久久爱av电影| aaa大片在线观看| 欧美久久在线观看| 在线观看毛片网站| 国产精品一区二区在线观看不卡| 国内外成人免费视频| 高h视频在线| 91亚洲国产成人精品一区二三| 欧美系列一区| 高清免费电影在线观看| 色综合久久综合网97色综合 | 五月天丁香激情| 蜜乳av另类精品一区二区| 亚洲精品免费网站| 久久精品国产亚洲a∨麻豆| 亚洲精品欧美在线| 最新中文字幕免费视频| 青青草原在线亚洲| 欧美成人性生活| 亚洲熟妇无码久久精品| 久久久影院官网| 日本男女交配视频| 四虎精品在线观看| 一区二区国产精品视频| 成人午夜视频精品一区| 国产成人精品免费网站| 中文字幕欧美日韩一区二区三区 | 国产精品视频久久久| 少妇人妻精品一区二区三区| 最好看的中文字幕久久| 中文字幕第21页| 九九精品久久| 51ⅴ精品国产91久久久久久| 亚洲第一色视频| 亚洲欧美日本在线| 午夜激情视频网| 久久久9色精品国产一区二区三区| 国产精品7m视频| 黄色电影免费在线看| 一本一本大道香蕉久在线精品| 人妖粗暴刺激videos呻吟| 欧美日韩1区| 国产不卡一区二区在线观看| 永久免费网站在线| 日韩久久免费av| 欧美成人精品欧美一| 国产精品一区二区三区乱码| 9色视频在线观看| 日韩区一区二| 隔壁老王国产在线精品| 神马一区二区三区| 红桃视频成人在线观看| 少妇精品一区二区| 久久电影一区| 日韩久久在线| 欧美激情福利| 蜜臀久久99精品久久久无需会员| 精品欧美一区二区精品少妇| 亚洲一区二区三区精品在线| www男人天堂| 国产精品久久久久9999高清| 欧美重口乱码一区二区| 国产国产一区| 欧美人在线视频| 亚州男人的天堂| 在线精品视频小说1| 91视频免费看片| 韩国v欧美v亚洲v日本v| 99热这里只有精品免费| 久久365资源| 国产成人综合精品| 成人影院在线看| 精品sm在线观看| 一区二区三区麻豆| 一区二区在线观看视频| 久久久久成人精品无码中文字幕| 欧美一级久久| 伊人久久av导航| 福利欧美精品在线| 国产福利精品在线| av毛片在线看| 国产亚洲精品久久久优势| 国产情侣一区二区| 午夜精品久久久久久久| 91精品久久久久久久久久久久| 激情国产一区二区| 久久久一本二本三本| 首页国产精品| 精品一区二区三区国产| 91精品一区| 欧美中文字幕视频| 国产剧情在线| 亚洲片在线资源| www.av日韩| 欧美视频在线一区| 日韩免费不卡视频| 中文字幕亚洲精品在线观看| 黄色性生活一级片| 国产在线播放一区| 超碰影院在线观看| 极品中文字幕一区| 一区一区视频| 少妇精品久久久一区二区三区 | 加勒比色综合久久久久久久久| 国产精品扒开腿做爽爽爽男男 | 亚洲精品伦理在线| 欧美丰满老妇熟乱xxxxyyy| 成人午夜在线播放| 亚洲精品永久视频| 久久看片网站| 日韩小视频在线播放| 亚洲成av人片乱码色午夜| 日本一区免费在线观看| 99a精品视频在线观看| 国产在线视频91| 日韩中文影院| 青青精品视频播放| 波多野一区二区| 欧美精品18videos性欧| 超碰porn在线| 日韩在线观看免费全集电视剧网站| 天堂网2014av| 精品99999| 亚洲成人77777| 欧美一三区三区四区免费在线看| 亚洲免费视频二区| 91福利国产精品| 久久久久99精品成人片三人毛片| 亚洲午夜免费电影| 精品国产精品国产精品| 欧美高清在线一区| 中文字幕伦理片| 国产亚洲精品bt天堂精选| 国产网站无遮挡| 99久久免费精品| 亚洲 欧美 日韩在线| av一区二区三区黑人| 久久久老熟女一区二区三区91| 国产福利电影一区二区三区| 91在线第一页| 国产精品996| 中文字幕1区2区| 成人免费的视频| 成人性生活免费看| 91麻豆蜜桃一区二区三区| 日本丰满少妇裸体自慰| 91免费在线播放| 久久亚洲无码视频| 欧美极品xxx| 情侣偷拍对白清晰饥渴难耐| ●精品国产综合乱码久久久久| 小早川怜子一区二区的演员表| 国产精品美女久久久久久久久| 免费一级suv好看的国产网站| 亚洲国产精品ⅴa在线观看| 18啪啪污污免费网站| 中文字幕制服丝袜一区二区三区 | 杨幂一区二区国产精品| 国产99久久久国产精品潘金网站| 制服.丝袜.亚洲.中文.综合懂| 成人一区二区视频| www.自拍偷拍| 亚洲国产成人在线| 神马午夜精品91| 亚洲综合一区二区三区| 亚洲男人的天堂在线视频| 色婷婷香蕉在线一区二区| 中文字幕人妻互换av久久| 51精品秘密在线观看| 亚洲av无码专区在线| 亚洲精品www久久久久久广东| 欧美成人免费| 在线观看欧美成人| 中文字幕在线播放网址| 51视频国产精品一区二区| 青青久久精品| 国产一区在线免费观看| 日韩av在线播放网址| 国产在线视频综合| 天堂精品中文字幕在线| www.五月天色| 久久影院午夜片一区| 国产一二三av| 精品福利一区二区| 一区二区日韩视频| 亚洲精品国偷自产在线99热| 成人不用播放器| 欧美美女18p| 朝桐光一区二区| 99www免费人成精品| 精品产国自在拍| 国产aaa免费视频| 蜜臀久久久久久久| 国产精品久久无码| 中文字幕五月欧美| 探花视频在线观看| 日韩精品一区二区三区视频在线观看 | 日韩av在线电影观看| 狠狠色狠狠色综合日日tαg| mm1313亚洲国产精品无码试看| 国产99久久久国产精品免费看| 亚洲精品成人av久久| 精品久久久一区| 性色av蜜臀av| 综合av色偷偷网| av日韩亚洲| 国产精品免费一区二区三区四区 | 99在线精品免费视频| 青草av.久久免费一区| 中文字幕精品视频在线| 亚洲欧美成aⅴ人在线观看| 亚洲免费视频二区| 亚洲精品一区二区三区不| 日韩影视在线| 亚洲自拍欧美另类| 日韩欧美自拍| 青青在线视频免费| 99国产精品视频免费观看| 国产黄在线免费观看| 欧美日韩一区不卡| 国产一区二区影视| 日本乱人伦a精品| 日韩在线黄色| 国产精品无码一区二区在线| 国产69精品一区二区亚洲孕妇| 欧美日韩色视频| 欧美人狂配大交3d怪物一区| 国产乱视频在线观看| 欧美在线一区二区视频| 欧美xxxx在线| 波多野结衣之无限发射| 成人av在线播放网站| 欧美交换国产一区内射| 欧美一区二区三区爱爱| av大大超碰在线| 波多野结衣成人在线| 欧美视频在线观看| 日本精品一二三| 亚洲一区二区三区精品在线| 成人午夜视频一区二区播放| 欧美黑人xxxx| 国产三级精品三级在线观看国产| 天堂а√在线中文在线| 国产成人综合精品三级| 亚洲成人生活片| 欧美tk—视频vk| 成入视频在线观看| 久久天天狠狠| 首页国产欧美日韩丝袜| 亚洲一区二区自偷自拍| 欧美日韩aaa| 国产一二区在线| 成人欧美一区二区三区黑人免费| 好看的av在线不卡观看| 国产黑丝一区二区| 欧美性xxxx极品高清hd直播| 精华区一区二区三区| 国产精品亚洲视频在线观看| 久久久久午夜电影| 色欲无码人妻久久精品| 亚洲成a人v欧美综合天堂下载| 天天摸天天干天天操| 日本国产欧美一区二区三区| 欧美日韩在线二区| 在线a免费观看| 午夜精品一区二区三区免费视频| 欧洲亚洲精品视频| 成人黄色av播放免费| 午夜视频精品| 美国黄色一级毛片| 欧美视频一区二区在线观看| 成人免费视屏| 好看的日韩精品| 免费成人你懂的| 久久久久久久久久久久久久免费看 | 亚洲综合精品久久| 男男激情在线| 亚洲iv一区二区三区| 99在线|亚洲一区二区| 亚洲AV无码成人精品区明星换面 | 日韩影院二区| 精品人妻一区二区免费| 色哦色哦哦色天天综合| 国产在线更新| 蜜桃视频在线观看成人| 久久99精品久久久久| 日本少妇久久久| 中文字幕亚洲自拍| 国产伦理久久久久久妇女 | 亚洲欧美日韩精品久久久| 国产a精品视频| 一级淫片免费看| 日本高清久久天堂| 欧美午夜免费影院|