国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

新手React開發(fā)人員容易做錯(cuò)的5件事

開發(fā) 前端
這篇文章主要介紹React開發(fā)人員請(qǐng)勿執(zhí)行的操作以及如何解決的方法,這部分內(nèi)容是針對(duì)React的新手開發(fā)人員提供的。

請(qǐng)勿執(zhí)行的操作以及如何解決的方法,這部分內(nèi)容是針對(duì)React的新手開發(fā)人員提供的。

1. 忘記大寫React組件

考慮一下這段代碼,它創(chuàng)建一個(gè)簡單的div,其中包含父組件的標(biāo)題。里面有一個(gè)子組件,其中包含帶有一些文本的div。

  1. class childComponent extends React.Component { 
  2.   render() { 
  3.     return ( 
  4.       <div className='childDiv'> 
  5.         <p>Child Component</p> 
  6.       </div> 
  7.     ); 
  8.   } 
  9.  
  10. class ParentComponent extends React.Component { 
  11.   render() { 
  12.     return ( 
  13.       <div className='parentDiv'> 
  14.         <h1 className='parentHeader'>Parent Component</h1> 
  15.         <childComponent /> 
  16.       </div> 
  17.     ); 
  18.   } 
  19.  
  20. export default ParentComponent; 

您認(rèn)為代碼運(yùn)行時(shí)會(huì)出現(xiàn)什么?

childComponent 未渲染。它去哪兒了?代碼編譯成功,終端也沒有錯(cuò)誤。

再次查看子組件的代碼。注意組件的名稱,你注意到什么不同了嗎?

在瀏覽器中打開控制臺(tái),瀏覽器控制臺(tái)警告的大小寫不正確

事實(shí)證明,React將小寫組件視為DOM標(biāo)記。如果你是React的新手,你可能已經(jīng)錯(cuò)過了React文檔中的這個(gè)小細(xì)節(jié)。

如果不了解這一點(diǎn),初學(xué)者常常會(huì)陷入這樣的困惑:即他們的代碼編譯沒有任何錯(cuò)誤,到底哪里出了問題?

解決方法很簡單,大寫您的組件。

2. 錯(cuò)誤地調(diào)用收到的props

要訪問由父組件傳入的prop,子組件必須確保它們調(diào)用了正確的prop名稱。

還可以使用另一個(gè)變量名將Props傳遞給子組件。考慮以下代碼片段:

  1. class ChildComponent extends React.Component { 
  2.   render() { 
  3.     const { randomString } = this.props; 
  4.  
  5.     return ( 
  6.       <div className='childDiv'> 
  7.         <p>{randomString}</p> 
  8.       </div> 
  9.     ); 
  10.   } 
  11.  
  12. class ParentComponent extends React.Component { 
  13.   render() { 
  14.     const randomString = 'lorem ipsum'
  15.      
  16.     return ( 
  17.       <div className='parentDiv'> 
  18.         <h1 className='parentHeader'>Parent Component</h1> 
  19.         <ChildComponent mainText={randomString} /> 
  20.       </div> 
  21.     ); 
  22.   } 

盡管此代碼可以編譯并運(yùn)行無誤,但 ChildComponent內(nèi)不會(huì)渲染任何文本。

  1. <ChildComponent mainText={randomString} /> 

仔細(xì)看看這一行代碼,在 ParentComponent 中聲明的變量 randomString 作為名為 mainText 的prop傳遞給 ChildComponent。

然而,ChildComponent 試圖從它收到的prop中訪問 randomString。由于它僅接收 mainText 作為prop,因此將導(dǎo)致未定義的值分配給在 ChildComponent 中聲明的 randomString。結(jié)果,其

標(biāo)記內(nèi)未呈現(xiàn)任何內(nèi)容。

注意哪些prop被傳遞到您的組件中,并相應(yīng)地訪問它們。這將在調(diào)試期間為您節(jié)省一些不必要的麻煩。

3. 傳遞不正確的Props類型

如果所接收的prop不是預(yù)期的類型,那么依賴于這些接收prop的組件可能會(huì)有不同的行為。

  1. class ChildComponent extends React.Component { 
  2.   render() { 
  3.     const { showIntro, showBody } = this.props; 
  4.  
  5.     return ( 
  6.       <div className='childDiv'> 
  7.         {showIntro && <p>Hello!</p>
  8.         {showBody && <p>Spot the mistake!</p>
  9.       </div> 
  10.     ); 
  11.   } 

考慮這個(gè)有兩個(gè)prop的 ChildComponent:showIntro 和 showBody。它顯示“你好!和“發(fā)現(xiàn)錯(cuò)誤!”只有當(dāng)showIntro 和 showBody 分別設(shè)置為 true 時(shí)才會(huì)這樣。

ChildComponent 希望將兩個(gè)布爾值作為prop傳遞。如果在父組件中執(zhí)行類似的操作,會(huì)發(fā)生什么情況?

  1. <ChildComponent showIntro='false' showBody='false' /> 
  2. <ChildComponent showIntro={'false'} showBody={'false'} /> 
  3. <ChildComponent showIntro={false} showBody={false} /> 

在prop中使用了不同的引號(hào)和大括號(hào)。但是,它們的行為將不同。看看這個(gè):

前兩個(gè) ChildComponent 都渲染了兩個(gè)<p>標(biāo)記,而最后一個(gè) ChildComponent 沒有渲染。

作為prop傳遞的 'false' 和 {'false'} 會(huì)導(dǎo)致無意中為 showIntro 和 showBody 分配了一個(gè)值為 false 的字符串,而不是布爾值 false。

對(duì)于前兩個(gè) ChildComponent,將 showIntro 和 showBody 都計(jì)算為 true。

這是由于 && 運(yùn)算符的隱式強(qiáng)制類型轉(zhuǎn)換。當(dāng) && 運(yùn)算符檢查 showIntro 或 showBody(均為字符串)時(shí),兩個(gè)字符串都將強(qiáng)制為 true。

最后一個(gè) ChildComponent 接收到布爾值 false,因此它沒有正確渲染任何內(nèi)容。

  1. console.log(`showIntro type: ${typeof showIntro}`); 
  2. console.log(`showIntro evaluated to: ${showIntro && true}`); 
  3. console.log(`showBody type: ${typeof showBody}`); 
  4. console.log(`showBody evaluated to: ${showBody && true}`); 

為了確認(rèn)這一點(diǎn),我們運(yùn)行 console.log() 來檢查每個(gè) ChildComponent 中prop的運(yùn)行結(jié)果。

正如這里所演示的,初學(xué)者在將prop傳遞給其他組件時(shí)能夠區(qū)分使用引號(hào)和花括號(hào)之間的區(qū)別是非常重要的。

您可以使用引號(hào)來傳遞字符串文字。

  1. <MyComponent data='Hello World!'/> // passing in a String 

花括號(hào)用于傳遞JavaScript表達(dá)式。

  1. <MyComponent data={2468} /> // passing in a Number 
  2. <MyComponent data={true} /> // passing in a Boolean 

以下是Reac文檔中的一些注意事項(xiàng):

將JavaScript表達(dá)式嵌入屬性中時(shí),請(qǐng)勿在大括號(hào)周圍加上引號(hào)。您應(yīng)該使用引號(hào)(用于字符串值)或大括號(hào)(用于表達(dá)式),但不要在同一屬性中都使用引號(hào)。

4. 在render()內(nèi)部調(diào)用setState()

下圖無限循環(huán)錯(cuò)誤消息

盡管您的組件中沒有 componentWillUpdate() 或 componentWillUpdate(),您仍可能遇到此錯(cuò)誤。當(dāng)您在 render() 函數(shù)中調(diào)用 setState() 時(shí)也會(huì)發(fā)生此錯(cuò)誤。

為什么會(huì)這樣?每次調(diào)用 setState() 時(shí),React將通過調(diào)用 render() 重新渲染。您的 render() 函數(shù)內(nèi)部是什么?setState()。你看到結(jié)果了嗎?一個(gè)無限循環(huán)。

只需將 setState() 調(diào)用移到 render() 函數(shù)之外即可。

如果在組件掛載后必須初始化狀態(tài)(也許是從API端點(diǎn)提取數(shù)據(jù)),請(qǐng)?jiān)?componentDidMoun() 中進(jìn)行。

如果可以在組件掛載之前初始化狀態(tài),也可以使用構(gòu)造函數(shù)來完成。

5. setState()的異步性

在調(diào)試時(shí),通常使用 console.log() 打印值。但是,當(dāng)代碼異步運(yùn)行時(shí),這不能很好地工作。

  1. handleCounterIncrement = () => { 
  2.   const { counter } = this.state; 
  3.   console.log(`Before update: ${counter}`); 
  4.   this.setState({ counter: counter + 1 }); 
  5.   console.log(`After update: ${counter}`); 
  6. }; 

你以前試過這樣做嗎?壞消息——setState() 調(diào)用是異步的。不能保證給定的代碼將按順序執(zhí)行。它可能導(dǎo)致如下輸出:

在執(zhí)行 setState() 之前執(zhí)行了兩個(gè) console.log() 調(diào)用。因此,它兩次打印前一個(gè)狀態(tài)的值。

如果希望在調(diào)用 setState() 之前和之后檢查狀態(tài)的值,請(qǐng)?jiān)?setState() 中將回調(diào)作為第二個(gè)參數(shù)傳遞。

  1. handleCounterIncrement = () => { 
  2.   const { counter } = this.state; 
  3.   console.log(`before update: ${counter}`); 
  4.   this.setState({ counter: counter + 1 }, () => { 
  5.     console.log(`after update: ${this.state.counter}`); 
  6.   }); 
  7. }; 

回調(diào)將在 setState() 完成后執(zhí)行,從而為 console.log() 提供同步行為。

 

責(zé)任編輯:趙寧寧 來源: 前端外文精選
相關(guān)推薦

2013-01-10 10:10:11

Web開發(fā)Web工具

2020-01-06 17:45:13

GitJavaScriptCSS

2017-02-24 19:10:45

C#開發(fā)人員

2020-07-06 07:48:42

開發(fā)成功技巧

2010-05-17 09:50:24

PHP

2015-11-23 10:47:27

2015-07-28 16:38:56

App移動(dòng)開發(fā)

2024-02-14 08:00:00

ChatGPTReact人工智能

2019-04-24 08:56:34

Java開發(fā)人員常犯錯(cuò)誤

2009-12-08 19:39:16

PHP開發(fā)人員

2023-06-15 15:48:36

Grafana開發(fā)前端

2021-11-30 17:37:14

ReactRedux

2010-08-09 16:09:25

2012-05-30 15:15:42

ibmdw

2023-03-15 07:12:53

企業(yè)開發(fā)人員提供商

2009-12-11 14:50:14

Visual Basi

2009-11-23 20:07:51

ibmdw開發(fā)

2021-02-19 09:33:01

kubernetesJAVA服務(wù)

2020-10-13 08:41:58

Java開發(fā)框架

2021-08-21 15:19:50

Linux開發(fā)工具
點(diǎn)贊
收藏

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

人人爽久久涩噜噜噜网站| 成人在线免费电影网站| 一道本在线免费视频| 日本一区二区高清不卡| 极品美女销魂一区二区三区| 国产精品欧美激情| 日韩免费小视频| 欧美在线一二三四区| 成人免费在线小视频| 欧美日韩精选| 91精品国产91久久久| 国产盗摄精品一区二区酒店| 亚洲色图欧美偷拍| 第九区2中文字幕| 欧美日韩 国产精品| 亚洲日本精品| 最新精品国产| 日本精品视频网站| 国产精品第一| 国产精品一线| 日本乱人伦aⅴ精品| 国产精品人人爽人人爽| 久久电影国产免费久久电影| 国产精品日本精品| 老鸭窝毛片一区二区三区| 成人在线视频网站| 久久久国产精品网站| 欧美一区二区视频在线观看2020| 男生操女生视频网站| 丰满白嫩尤物一区二区| 欧美精品一区二区三区在线四季 | 亚洲女爱视频在线| 四季久久免费一区二区三区四区| 中文字幕亚洲视频| 欧美一区二区三区艳史| 污污的网站在线免费观看| www插插插无码免费视频网站| 久久综合99| 欧美亚洲日本网站| 免费在线亚洲欧美| 激情丁香婷婷| 亚洲色图第一页| 日韩精选视频| 99久久一区三区四区免费| 欧美国产偷国产精品三区| 农民人伦一区二区三区| 成人av网站大全| 无码人妻精品一区二区蜜桃网站| 精品成人在线视频| 91在线最新| 精品久久久久久亚洲精品| 日本精品另类| 久久精品成人动漫| 成人免费观看49www在线观看| 中文字幕精品—区二区| 成人网ww555视频免费看| 国产伦视频一区二区三区| 国产欧美二区| 欧美日韩一区二区三区在线观看免| 中文字幕亚洲视频| 欧美成人毛片| 一级二级三级欧美| 免费观看视频www| 亚洲综合国产精品| 欧美日韩日本网| 国产精品久久久久久福利一牛影视| www成人免费视频| 亚洲国产毛片aaaaa无费看| 成人午夜大片免费观看| 久久久999免费视频| 欧美激情在线一区二区| 在线观看老湿视频福利| 欧美激情免费视频| 精品国产一区二区三区四区| 国产精品入口尤物| 国产欧美日韩综合精品一区二区| 成人在线不卡| 男人天堂av片| 亚洲激情综合网| 成人影视在线播放| 亚洲成人av在线| 久久久久久久久成人| 国内精品免费午夜毛片| 精品国产123区| 美女网站色免费| 色老综合老女人久久久| 免费久久久久久久久| 久久精品中文字幕一区二区三区 | 欧美激情一区不卡| 亚洲欧美在线综合| 国产成人自拍视频在线观看| 日韩免费观看高清完整版| 久久久国产精品| 精品免费久久久久久久| 国产欧美一区二区三区另类精品| 久久av一区| freemovies性欧美| 国产精品亚洲一区| 欧美日韩一区在线| 久久亚洲中文字幕无码| 欧美成人精品h版在线观看| 午夜亚洲影视| 中文字幕欧美人与畜| 国产精品久久久久久福利一牛影视 | 996这里只有精品| 精品调教chinesegay| 永久免费精品视频| 国产亚洲福利社区| 欧美亚洲综合久久| 在线一区二区三区视频| 国产91色在线观看| 日韩av快播网址| 欧美大片免费久久精品三p| 在线看片日韩| www亚洲成人| 在线视频精品一区| 国产精品美女久久| 全网国产福利在线播放| 国产高清不卡二三区| 啊啊啊国产视频| 亚洲精品国产品国语在线| 欧美黑人粗大| 亚洲私人黄色宅男| 精品国产一区二区三区成人影院 | 极品少妇一区二区| 成人性生交大片免费看中文视频| 一区二区国产视频| 日本 片 成人 在线| 操一操视频一区| 国产精品av在线播放| 欧美成人高清电影在线| 色婷婷综合网| blacked蜜桃精品一区| 欧美日韩第一| 天堂va欧美ⅴa亚洲va一国产| 在线观看麻豆| 欧美成人精品不卡视频在线观看| 欧美日本精品一区二区三区| 国产探花在线观看| 无人区乱码一区二区三区| 黑人粗进入欧美aaaaa| 中文字幕久精品免费视频| 欧美肥老妇视频| 久久久亚洲影院| 欧美极品少妇xxxxⅹ免费视频| 九九九久久久精品| 欧美国产日本韩| 日韩国产91| 久久久天堂国产精品女人| 伊人久久五月天| 国产一区二区美女诱惑| 亚洲精品怡红院| 色中文字幕在线观看| 亚洲欧洲精品天堂一级| 99久久伊人精品| 丝袜国产在线| 首页国产精品| 久久经典综合| 日韩激情一区二区| 黄色小视频在线播放| 免费无码毛片一区二三区| 午夜影院网站| 男女啪啪免费视频网站| 国产中文一区二区| 国产精品久久久久影院日本| 日本一区视频在线观看| 欧美日韩国产在线看| 亚洲一区二区三区四区五区午夜| 一区二区三区高清在线观看| 日韩一级淫片| 成人深夜福利| 国产在线不卡一卡二卡三卡四卡| 国产免费成人在线视频| ㊣最新国产の精品bt伙计久久| 国产一区二区三区在线播放免费观看 | 懂色av噜噜一区二区三区av| 日韩激情中文字幕| 97干在线视频| 国产一区二区三区三区在线观看 | 精品国产乱码久久久久久丨区2区| 久草中文综合在线| 女厕盗摄一区二区三区| 欧美壮男野外gaytube| 亚洲免费视频成人| 日韩av密桃| av大大超碰在线| 隔壁老王国产在线精品| 亚洲欧洲国产日本综合| 日韩精品第一区| 在线中文字幕电影| 国产精品久久久久9999爆乳| 久久久久久久国产| 色婷婷综合五月| 99re6热只有精品免费观看| 日本高清视频网站www| 国产在线精品一区| 中文字幕亚洲欧美在线 | 欧美国产日本韩| 中文字幕一区二区av| 又粗又黑又大的吊av|