自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

React組件開發(fā)中常見的陷阱

開發(fā) 前端
在React中編寫組件時(shí)有很多陷阱。如何合理的避免這些常見錯(cuò)誤,可以讓我們的程序更加健壯,也能使我們的編程能力獲得提高。

React作為使用最廣泛Web前端開發(fā)之一,在Web開發(fā)領(lǐng)域越來(lái)成熟和穩(wěn)固。其新版本發(fā)布的Hook API/concept使得組件更加便捷易用。雖然如此,React開發(fā)中仍然有很多的陷阱值得每一位React擁躉關(guān)注。

陷阱一:使用函數(shù)式組件

在React中可以使用兩種方法編組件函數(shù)式和類組件。函數(shù)式組件方式比較直觀,所以被廣為采用,但是函數(shù)式組件卻存在問(wèn)題:不支持Hook函數(shù)和沒有內(nèi)部state狀態(tài)屬性。

錯(cuò)誤代碼示例:

  1. function Chongchong(props) {  
  2. return <h1>Hello, {props.name}</h1> 

問(wèn)題分析:

函數(shù)式組件,不支持Hook函數(shù),比如在組件加載后去請(qǐng)求API獲取數(shù)據(jù)就不可能。

解決方案:

使用類組件,可以獲得Hook和狀態(tài)的加權(quán)。

陷阱二:錯(cuò)誤的使用useState

在React中最重要的理念是對(duì)狀態(tài)的處理,可以通過(guò)其控制整個(gè)數(shù)據(jù)流和狀態(tài)渲染。當(dāng)需要重新渲染樹的時(shí)候,都是狀態(tài)變化先行。

通過(guò)useState Hook,可以在功能組件中定義狀態(tài)。這是處理狀態(tài)簡(jiǎn)潔、方便的方法。因?yàn)槿绱?,常常被濫用。

實(shí)例中,假設(shè)有兩個(gè)按鈕,一個(gè)按鈕用來(lái)計(jì)數(shù),另一個(gè)按鈕用來(lái)發(fā)送計(jì)數(shù)或者或觸發(fā)操作。但是,當(dāng)前編號(hào)永遠(yuǎn)不會(huì)顯示在組件內(nèi)。僅當(dāng)單擊第二個(gè)按鈕時(shí)才需要該請(qǐng)求。

錯(cuò)誤代碼示例:

問(wèn)題分析:

在做出反應(yīng)時(shí),每個(gè)狀態(tài)的變化都將迫使該組件及其子組件重新呈現(xiàn)。但是上面的代碼中,由于未在渲染部分中使用該狀態(tài),因此每次設(shè)置計(jì)數(shù)器時(shí),都會(huì)進(jìn)行不必要的渲染,這會(huì)影響性能,還可能會(huì)產(chǎn)生副作用。

解決方案:

如果要在組件內(nèi)部使用變量,變量值要在渲染前后保持,不強(qiáng)制重新渲染,則可以使用useRefHook。它會(huì)保留該值,不強(qiáng)制重新渲染組件。

陷阱三:用router.push代替鏈接

假設(shè)要編寫一個(gè)按鈕,然后單擊該按鈕,需要用戶重定向到另一個(gè)頁(yè)面。由于它是,因此此操作將是一種客戶端路由機(jī)制。因此,將需要某種庫(kù)來(lái)執(zhí)行此操作。在react中,最常用的是react-router:

錯(cuò)誤代碼示例:

問(wèn)題分析:

對(duì)于大多數(shù)用戶來(lái)說(shuō)這可以正常工作,但其可訪問(wèn)性仍然存在問(wèn)題。按鈕根本不會(huì)被標(biāo)記為鏈接到另一個(gè)頁(yè)面,這使得屏幕閱讀器幾乎無(wú)法識(shí)別按鈕??赡軣o(wú)法在新標(biāo)簽頁(yè)或窗口中打開。

解決方案:

在任何可能的情況下,跳轉(zhuǎn)鏈接都應(yīng)該用組件或常規(guī)的標(biāo)簽。

 

陷阱四:通過(guò)useEffect處理動(dòng)作

React引入的最常用最好用Hook之一是"useEffect"Hook。該Hook允許處理與之相關(guān)prop或state發(fā)生變化的動(dòng)作。很好用,但經(jīng)常被誤到可能不需要的地方。

一個(gè)組件場(chǎng)景:組件獲取項(xiàng)目列表并將其呈現(xiàn)給dom。另外,如果請(qǐng)求成功,將調(diào)用"onSuccess"函數(shù),該函數(shù)作為道具傳遞給組件。

錯(cuò)誤代碼示例:

 

問(wèn)題分析:

上述代碼使用了兩個(gè)useEffect Hook,第一個(gè)Hook處理初始渲染時(shí)的API調(diào)用,第二個(gè)Hook調(diào)用onSuccess函數(shù):假設(shè)沒有加載,沒有錯(cuò)誤但狀態(tài)為數(shù)據(jù)時(shí),必須已成功調(diào)用。

這是正確的,并且可能永遠(yuǎn)不會(huì)失敗。這樣,也失去了動(dòng)作和需要調(diào)用的功能之間的直接聯(lián)系。無(wú)法保證這種情況只會(huì)在獲取操作成功后才會(huì)發(fā)生。

解決方案:

最直接的方法是將"onSuccess"功能設(shè)置為在調(diào)用成功的實(shí)際位置:

現(xiàn)在一目了然,確切地表明了是在api調(diào)用成功的情況下onSuccess。

陷阱五:多個(gè)事件混用

什么時(shí)候該將一個(gè)組件拆分為幾個(gè)較小的組件?如何構(gòu)造組件樹?在使用基于組件的框架時(shí),每天都會(huì)出現(xiàn)所有這些問(wèn)題。但是,設(shè)計(jì)組件時(shí)常見的錯(cuò)誤是將兩個(gè)用例組合到一個(gè)組件中。下面實(shí)例假設(shè)要顯示標(biāo)題為移動(dòng)設(shè)備上的BurgerButton按鈕或桌面屏幕上的標(biāo)簽。

錯(cuò)誤代碼示例:

問(wèn)題分析:

通過(guò)這種方法,為HeaderInner組件設(shè)置兩種狀態(tài)。這會(huì)使得在其他地方測(cè)試或重用該組件變得更加困難。

解決方案:

分清楚事件,是要設(shè)置Header,Tabs或者BurgerButton,不要將兩件事混用。

陷阱六:useEffectHook處理多個(gè)事件

例如,假設(shè)有一個(gè)組件以某種方式從后端獲取一些數(shù)據(jù),并且還根據(jù)當(dāng)前位置顯示Breadcrumbs。

錯(cuò)誤代碼示例:

問(wèn)題分析:

有兩個(gè)用例,即"數(shù)據(jù)獲取"和"顯示Breadcrumbs"。兩者都用useEffectHook更新。更改useEffect時(shí),將運(yùn)行單個(gè)Hook。問(wèn)題是,當(dāng)位置更改時(shí),也會(huì)調(diào)用該函數(shù),這會(huì)帶來(lái)副作用。

解決方案:

拆分效果,確保它們僅用于一種效果,這樣的副作用也會(huì)消失。

總結(jié)

在React中編寫組件時(shí)有很多陷阱。如何合理的避免這些常見錯(cuò)誤,可以讓我們的程序更加健壯,也能使我們的編程能力獲得提高。

 

責(zé)任編輯:趙寧寧 來(lái)源: 蟲蟲搜奇
相關(guān)推薦

2014-05-04 16:39:49

開源項(xiàng)目開源產(chǎn)品

2010-01-26 15:32:43

Scala用法錯(cuò)誤

2010-10-26 10:16:36

求職

2019-10-30 16:03:48

JavaJava虛擬機(jī)數(shù)據(jù)庫(kù)

2009-06-30 16:03:00

異常Java

2022-10-10 09:00:35

ReactJSX組件

2016-11-29 08:25:07

iOS軟件開發(fā)者數(shù)據(jù)可視化

2019-07-22 10:42:11

React組件前端

2012-08-22 10:44:08

軟件開發(fā)

2019-03-21 14:18:38

iOS開發(fā)優(yōu)化原因

2019-07-20 23:30:48

開發(fā)技能代碼

2019-10-11 15:46:29

編程語(yǔ)言JavaJavaScript

2023-12-25 08:25:42

AndroidHook應(yīng)用程序

2009-07-02 11:06:57

JSP預(yù)定義變量

2021-12-27 08:58:28

低代碼開發(fā)數(shù)據(jù)安全

2022-03-11 10:01:47

開發(fā)跨域技術(shù)

2021-03-10 09:44:20

微信小程序APP

2020-04-20 17:15:32

Java開發(fā)代碼

2009-06-16 13:48:42

Java多線程

2017-01-23 08:41:43

云計(jì)算
點(diǎn)贊
收藏

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