日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

React 函數組件不是有狀態嗎,為什么還要說他是純函數

來源: 責編: 時間:2024-05-08 09:19:08 201觀看
導讀許多人在學習 React 時會有這樣一個疑問,不斷看到 React 官方團隊言論,或者說各路大佬都是在說 React 是函數式編程,我們寫組件確實寫的是組件,但問題就在于,我們寫的組件是有內部狀態,這樣的函數就不是純函數了,這怎么能算

w4Z28資訊網——每日最新資訊28at.com

許多人在學習 React 時會有這樣一個疑問,不斷看到 React 官方團隊言論,或者說各路大佬都是在說 React 是函數式編程,我們寫組件確實寫的是組件,但問題就在于,我們寫的組件是有內部狀態,這樣的函數就不是純函數了,這怎么能算是函數式編程呢?w4Z28資訊網——每日最新資訊28at.com

想不通。w4Z28資訊網——每日最新資訊28at.com

今天這篇文章,就來跟大家解釋一下,為什么 React 的函數式組件,其實就是純函數。w4Z28資訊網——每日最新資訊28at.com

UI = f(state)

一、hook 的特性

我們在聲明一個函數式組件時,常常會使用到 hook 來聲明一些狀態或者方法,但是我們在使用 hook 時,你會發現 hook 會有一些奇怪的規則,那么就是不能把 hook 放到條件判斷中去。w4Z28資訊網——每日最新資訊28at.com

if (a === 1) {  const [count, setCount] = useState(0)}

然后有的人就很不理解這個現象。于是把這個情況定性為 React 的設計缺陷。但這真的是設計缺陷嗎?w4Z28資訊網——每日最新資訊28at.com

我們只需要換個思路,你就能對這個現象豁然開朗。w4Z28資訊網——每日最新資訊28at.com

二、hook 存在哪?

在初學階段,我們會很自然的認為,當我們使用 useState 在函數內部定義了一個狀態時,那么這個狀態一定是保存在這個函數內部的。w4Z28資訊網——每日最新資訊28at.com

function Demo() {  const [count, setCount] = useState(0)  ...}

然后理解得多了,才發現并不是這樣。每一個函數的狀態都被存在了另外一個模塊里(Fiber tree)。也就是說,只要 React 允許,我們甚至可以在別的組件訪問到任意一個組件里的狀態。當然 React 對這種情況做了限制,只允許通過特定的語法來做到這個事情。w4Z28資訊網——每日最新資訊28at.com

函數組件中的所有的 hook 都是從外部傳入的。w4Z28資訊網——每日最新資訊28at.com

三、state 其實是參數

我們再來看一下這個公式。w4Z28資訊網——每日最新資訊28at.com

UI = f(state)

這個時候我們會恍然發現,雖然 state 在函數內部定義/獲取了,但是很明顯,React 是期望大家把他當成外部傳入的參數來理解的。w4Z28資訊網——每日最新資訊28at.com

例如我們有這樣一個函數。w4Z28資訊網——每日最新資訊28at.com

function Counter({x}) {  const [count, setCount] = useState(0)  return (    <div>{x + count}</div>  )}

他可以等價于。w4Z28資訊網——每日最新資訊28at.com

function Counter({x}, [count = 0, setCount]) {  return (    <div>{x + count}</div>  )}

這個時候我們就明朗了,函數,原來還是純函數。但是為什么語法不這樣設計呢,不是更好理解嗎?當然是因為參數太多了寫不下了呀,因此 React 把傳參的行為,下放到了函數內部,通過 hook 的方式來實現。w4Z28資訊網——每日最新資訊28at.com

四、重新審視 hook

如果 state 是外部傳入的參數,那么此時我們就要重新審視一下為什么不能把 hook 放到條件判斷中去了。w4Z28資訊網——每日最新資訊28at.com

例如:w4Z28資訊網——每日最新資訊28at.com

function Counter({x}) {  if (a === 0) {    const [loading, setLoading] = useState(false)    }  const [count, setCount] = useState(0)  return (    <div>{x + count}</div>  )}

所以,useState 是外部傳參,那么參數本來就應該有嚴格的順序要求,這個時候如果第一個參數因為不符合條件而在代碼邏輯里消失了,那第二個參數,不就變成第一個參數了嗎?w4Z28資訊網——每日最新資訊28at.com

這個時候代碼邏輯中,就會把第二個參數當成第一個參數去使用,這不就亂了嗎?w4Z28資訊網——每日最新資訊28at.com

當我們調用 setState 時,表示入參正在發生變化,函數自然也會重新執行。w4Z28資訊網——每日最新資訊28at.com

五、總結

hook 存放在函數外部,因此不屬于函數內部的狀態。我們在理解函數式組件是純函數時,應該把 hook 當成參數去看待,這樣很多現象就非常自然了。w4Z28資訊網——每日最新資訊28at.com

函數式編程更加側重于把邏輯解耦拆分成不同的函數,然后通過函數組合的形式去構建一個完整的邏輯,例如我們非常常見的 map 方法w4Z28資訊網——每日最新資訊28at.com

function func(item) {  return item + 1}var newArr = arr.map(func)

所以理解函數式編程,會對邏輯封裝解耦的能力要求比較高,在這種情況下,理解函數式編程確實會存在一定的門檻。所以最后思考一個問題,為什么 state 一定要是不可變數據?w4Z28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87257-0.htmlReact 函數組件不是有狀態嗎,為什么還要說他是純函數

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: HTMX:重回前端的原始時代?

下一篇: 十項快速檢查,確保你的 AWS 支出處于控制之中

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产亚洲欧美一区在线观看| 欧美激情在线免费观看| 亚洲天堂网在线观看| 亚洲午夜精品一区二区| 性欧美1819性猛交| 久久综合影音| 欧美另类在线播放| 国产精品主播| 一区二区在线观看视频| 亚洲精品黄色| 在线视频日本亚洲性| 亚洲欧美在线另类| 免费国产一区二区| 国产精品vip| 国产一区二区三区高清在线观看| 亚洲国产精品www| 亚洲一二三四久久| 久久三级福利| 欧美日韩视频在线第一区| 国产一二三精品| 99国产精品久久久久老师 | 亚洲日本在线观看| 亚洲综合精品一区二区| 久久综合狠狠| 欧美性片在线观看| 国产一区二区三区丝袜| 亚洲狼人综合| 欧美专区日韩视频| 欧美日韩另类综合| 激情欧美一区| 亚洲一区二区欧美日韩| 葵司免费一区二区三区四区五区| 欧美午夜性色大片在线观看| 精品91在线| 亚洲永久在线观看| 欧美顶级少妇做爰| 国产私拍一区| 在线视频亚洲欧美| 美女主播一区| 国产区二精品视| 9色porny自拍视频一区二区| 久久久久久一区| 国产精品hd| 亚洲经典一区| 久久精品亚洲一区二区| 国产精品videosex极品| 亚洲第一搞黄网站| 午夜精品久久久久久| 欧美日本三区| 亚洲大片在线| 欧美在线国产| 国产精品劲爆视频| 亚洲人成在线观看| 久久久99爱| 国产精品视频| 一区二区免费在线观看| 久久一二三国产| 99国产精品| 免费视频久久| 韩日午夜在线资源一区二区| 亚洲免费在线电影| 欧美日韩大片| 亚洲国产精品一区在线观看不卡| 欧美在线你懂的| 国产精品视频久久| 国产精品99久久久久久久vr| 欧美国产日韩视频| 亚洲电影激情视频网站| 久久久久免费观看| 国产婷婷色综合av蜜臀av| 亚洲永久精品大片| 国产精品啊v在线| 一区二区三区精密机械公司| 欧美激情亚洲精品| 91久久久国产精品| 麻豆精品传媒视频| 在线观看日韩一区| 久久久噜噜噜久噜久久| 国产真实久久| 久久精品99国产精品日本| 国产视频在线观看一区二区| 亚洲欧美在线视频观看| 欧美午夜a级限制福利片| 99精品国产热久久91蜜凸| 欧美激情综合五月色丁香小说| 亚洲国产日韩欧美综合久久| 免费日韩精品中文字幕视频在线| 亚洲大片在线| 欧美高清不卡在线| 亚洲精品色婷婷福利天堂| 欧美精品久久久久久久| 日韩亚洲综合在线| 欧美日韩综合视频网址| 一区二区三区久久| 国产精品sm| 午夜欧美大片免费观看| 国产欧美日韩精品专区| 久久福利一区| 在线观看日韩av电影| 久久九九国产| 在线日韩电影| 欧美高清你懂得| 亚洲免费不卡| 国产精品播放| 欧美一区激情| 国产亚洲综合性久久久影院| 久久久久久电影| 亚洲国产成人精品视频| 欧美精选午夜久久久乱码6080| 99pao成人国产永久免费视频| 欧美午夜一区二区三区免费大片| 亚洲在线免费观看| 国产亚洲精品资源在线26u| 久久久久久久久综合| 亚洲国产成人不卡| 欧美日韩国产综合视频在线观看| 中国成人黄色视屏| 国产欧美高清| 麻豆精品在线观看| 一本大道久久a久久精二百| 国产精品久久久久久久浪潮网站 | 欧美日韩一区二区三区高清| 亚洲丝袜av一区| 国产日韩在线亚洲字幕中文| 美女主播视频一区| 一区二区三区成人| 国产亚洲精品高潮| 欧美成人一区二区三区| 中文一区二区在线观看| 国产亚洲毛片在线| 欧美精品激情| 亚洲欧美中文字幕| 亚洲第一成人在线| 国产精品hd| 久久人人看视频| 一区二区三区波多野结衣在线观看| 国产精品一区免费视频| 免费一级欧美片在线观看| 中文一区在线| 一区二区三区在线高清| 欧美色图麻豆| 久久午夜电影| 亚洲午夜精品一区二区三区他趣| 黄色成人在线| 欧美视频不卡中文| 久久性天堂网| 中文成人激情娱乐网| 一区免费观看| 国产精品黄色| 欧美激情 亚洲a∨综合| 欧美一级免费视频| 日韩系列欧美系列| 极品尤物久久久av免费看| 欧美日韩一区国产| 久久综合中文字幕| 亚洲综合精品四区| 亚洲欧洲一区二区天堂久久 | 国产视频精品va久久久久久| 欧美激情亚洲国产| 久久黄金**| 亚洲手机视频| 亚洲欧洲一区二区在线观看| 一本色道久久综合亚洲精品不| 狠狠综合久久av一区二区小说 | 欧美日韩的一区二区| 小处雏高清一区二区三区| 久久精品一区二区三区不卡牛牛| 国产一区二区三区久久精品| 久久国产免费| 在线精品视频一区二区| 欧美a级大片| 亚洲精品综合精品自拍| 99国产精品99久久久久久粉嫩 | 亚洲一区二区成人| 嫩草伊人久久精品少妇av杨幂| 精久久久久久| 久久亚洲欧美国产精品乐播| 一区在线视频观看| 亚洲新中文字幕| 欧美日韩亚洲综合一区| 亚洲精品看片| 欧美无乱码久久久免费午夜一区| 亚洲精品一区二区三区av| 欧美一进一出视频| 99re6热在线精品视频播放速度| 另类酷文…触手系列精品集v1小说| 亚洲国产日韩欧美在线图片| 欧美日韩国产首页在线观看| 亚洲一区亚洲二区| 国产精品自在在线| 免费观看日韩av| 亚洲日韩中文字幕在线播放| 欧美激情一区二区三级高清视频| 久久精品国产77777蜜臀| 在线观看日韩欧美| 免费欧美日韩| 午夜精品福利一区二区三区av | 国产综合精品| 欧美日韩高清一区| 欧美一区1区三区3区公司| 国产精品老女人精品视频| 日韩写真视频在线观看| 欧美日韩另类在线| 麻豆av福利av久久av|