偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試官:React構(gòu)建組件的方式有哪些?區(qū)別是什么?

開(kāi)發(fā) 前端
在React Hooks出來(lái)之前,函數(shù)式組件可以視為無(wú)狀態(tài)組件,只負(fù)責(zé)根據(jù)傳入的props來(lái)展示視圖,不涉及對(duì)state狀態(tài)的操作。

[[408797]]

本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

一、React組件是什么

組件就是把圖形、非圖形的各種邏輯均抽象為一個(gè)統(tǒng)一的概念(組件)來(lái)實(shí)現(xiàn)開(kāi)發(fā)的模式

在React中,一個(gè)類(lèi)、一個(gè)函數(shù)都可以視為一個(gè)組件

在Vue系列中,我們了解到組件所存在的優(yōu)勢(shì):

  • 降低整個(gè)系統(tǒng)的耦合度,在保持接口不變的情況下,我們可以替換不同的組件快速完成需求,例如輸入框,可以替換為日歷、時(shí)間、范圍等組件作具體的實(shí)現(xiàn)
  • 調(diào)試方便,由于整個(gè)系統(tǒng)是通過(guò)組件組合起來(lái)的,在出現(xiàn)問(wèn)題的時(shí)候,可以用排除法直接移除組件,或者根據(jù)報(bào)錯(cuò)的組件快速定位問(wèn)題,之所以能夠快速定位,是因?yàn)槊總€(gè)組件之間低耦合,職責(zé)單一,所以邏輯會(huì)比分析整個(gè)系統(tǒng)要簡(jiǎn)單
  • 提高可維護(hù)性,由于每個(gè)組件的職責(zé)單一,并且組件在系統(tǒng)中是被復(fù)用的,所以對(duì)代碼進(jìn)行優(yōu)化可獲得系統(tǒng)的整體升級(jí)

二、如何構(gòu)建

在React目前來(lái)講,組件的創(chuàng)建主要分成了三種方式:

  • 函數(shù)式創(chuàng)建
  • 通過(guò) React.createClass 方法創(chuàng)建
  • 繼承 React.Component 創(chuàng)建

函數(shù)式創(chuàng)建

在React Hooks出來(lái)之前,函數(shù)式組件可以視為無(wú)狀態(tài)組件,只負(fù)責(zé)根據(jù)傳入的props來(lái)展示視圖,不涉及對(duì)state狀態(tài)的操作

大多數(shù)組件可以寫(xiě)為無(wú)狀態(tài)組件,通過(guò)簡(jiǎn)單組合構(gòu)建其他組件

在React中,通過(guò)函數(shù)簡(jiǎn)單創(chuàng)建組件的示例如下:

  1. function HelloComponent(props, /* context */) { 
  2.   return <div>Hello {props.name}</div> 

通過(guò) React.createClass 方法創(chuàng)建

React.createClass是react剛開(kāi)始推薦的創(chuàng)建組件的方式,目前這種創(chuàng)建方式已經(jīng)不怎么用了

像上述通過(guò)函數(shù)式創(chuàng)建的組件的方式,最終會(huì)通過(guò)babel轉(zhuǎn)化成React.createClass這種形式,轉(zhuǎn)化成如下:

  1. function HelloComponent(props) /* context */{ 
  2.   return React.createElement( 
  3.     "div"
  4.     null
  5.     "Hello "
  6.     props.name 
  7.   ); 

由于上述的編寫(xiě)方式過(guò)于冗雜,目前基本上不使用上

繼承 React.Component 創(chuàng)建

同樣在react hooks出來(lái)之前,有狀態(tài)的組件只能通過(guò)繼承React.Component這種形式進(jìn)行創(chuàng)建

有狀態(tài)的組件也就是組件內(nèi)部存在維護(hù)的數(shù)據(jù),在類(lèi)創(chuàng)建的方式中通過(guò)this.state進(jìn)行訪問(wèn)

當(dāng)調(diào)用this.setState修改組件的狀態(tài)時(shí),組件會(huì)再次會(huì)調(diào)用render()方法進(jìn)行重新渲染

通過(guò)繼承React.Component創(chuàng)建一個(gè)時(shí)鐘示例如下:

  1. class Timer extends React.Component { 
  2.   constructor(props) { 
  3.     super(props); 
  4.     this.state = { seconds: 0 }; 
  5.   } 
  6.  
  7.   tick() { 
  8.     this.setState(state => ({ 
  9.       seconds: state.seconds + 1 
  10.     })); 
  11.   } 
  12.  
  13.   componentDidMount() { 
  14.     this.interval = setInterval(() => this.tick(), 1000); 
  15.   } 
  16.  
  17.   componentWillUnmount() { 
  18.     clearInterval(this.interval); 
  19.   } 
  20.  
  21.   render() { 
  22.     return ( 
  23.       <div> 
  24.         Seconds: {this.state.seconds} 
  25.       </div> 
  26.     ); 
  27.   } 

三、區(qū)別

由于React.createClass創(chuàng)建的方式過(guò)于冗雜,并不建議使用

而像函數(shù)式創(chuàng)建和類(lèi)組件創(chuàng)建的區(qū)別主要在于需要?jiǎng)?chuàng)建的組件是否需要為有狀態(tài)組件:

  • 對(duì)于一些無(wú)狀態(tài)的組件創(chuàng)建,建議使用函數(shù)式創(chuàng)建的方式
  • 由于react hooks的出現(xiàn),函數(shù)式組件創(chuàng)建的組件通過(guò)使用hooks方法也能使之成為有狀態(tài)組件,再加上目前推崇函數(shù)式編程,所以這里建議都使用函數(shù)式的方式來(lái)創(chuàng)建組件

在考慮組件的選擇原則上,能用無(wú)狀態(tài)組件則用無(wú)狀態(tài)組件

參考文獻(xiàn) 

https://react.docschina.org/

 

責(zé)任編輯:武曉燕 來(lái)源: JS每日一題
相關(guān)推薦

2021-07-01 07:51:45

React事件綁定

2021-07-05 11:06:11

組件React通信

2024-02-26 14:07:18

2025-03-07 00:36:01

VuePiniaVuex

2021-07-06 07:27:45

React元素屬性

2021-08-02 08:34:20

React性能優(yōu)化

2024-03-12 14:36:44

微服務(wù)HTTPRPC

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2024-04-16 08:15:07

CHAR數(shù)據(jù)字符串

2021-07-08 06:51:29

React函數(shù)組件

2021-07-14 08:00:13

reactCss模塊

2021-09-30 07:57:13

排序算法面試

2025-06-03 08:50:00

Static全局變量C 語(yǔ)言

2023-02-20 08:08:48

限流算法計(jì)數(shù)器算法令牌桶算法

2023-02-17 08:10:24

2021-12-10 12:01:37

finalfinallyfinalize

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2021-11-30 07:44:50

FinalFinallyFinalize

2021-10-21 07:18:02

微信程序方式
點(diǎn)贊
收藏

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