成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:React構建組件的方式有哪些?區別是什么?

開發 前端
在React Hooks出來之前,函數式組件可以視為無狀態組件,只負責根據傳入的props來展示視圖,不涉及對state狀態的操作。

[[408797]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰 。轉載本文請聯系JS每日一題公眾號。

一、React組件是什么

組件就是把圖形、非圖形的各種邏輯均抽象為一個統一的概念(組件)來實現開發的模式

在React中,一個類、一個函數都可以視為一個組件

在Vue系列中,我們了解到組件所存在的優勢:

  • 降低整個系統的耦合度,在保持接口不變的情況下,我們可以替換不同的組件快速完成需求,例如輸入框,可以替換為日歷、時間、范圍等組件作具體的實現
  • 調試方便,由于整個系統是通過組件組合起來的,在出現問題的時候,可以用排除法直接移除組件,或者根據報錯的組件快速定位問題,之所以能夠快速定位,是因為每個組件之間低耦合,職責單一,所以邏輯會比分析整個系統要簡單
  • 提高可維護性,由于每個組件的職責單一,并且組件在系統中是被復用的,所以對代碼進行優化可獲得系統的整體升級

二、如何構建

在React目前來講,組件的創建主要分成了三種方式:

  • 函數式創建
  • 通過 React.createClass 方法創建
  • 繼承 React.Component 創建

函數式創建

在React Hooks出來之前,函數式組件可以視為無狀態組件,只負責根據傳入的props來展示視圖,不涉及對state狀態的操作

大多數組件可以寫為無狀態組件,通過簡單組合構建其他組件

在React中,通過函數簡單創建組件的示例如下:

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

通過 React.createClass 方法創建

React.createClass是react剛開始推薦的創建組件的方式,目前這種創建方式已經不怎么用了

像上述通過函數式創建的組件的方式,最終會通過babel轉化成React.createClass這種形式,轉化成如下:

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

由于上述的編寫方式過于冗雜,目前基本上不使用上

繼承 React.Component 創建

同樣在react hooks出來之前,有狀態的組件只能通過繼承React.Component這種形式進行創建

有狀態的組件也就是組件內部存在維護的數據,在類創建的方式中通過this.state進行訪問

當調用this.setState修改組件的狀態時,組件會再次會調用render()方法進行重新渲染

通過繼承React.Component創建一個時鐘示例如下:

  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.   } 

三、區別

由于React.createClass創建的方式過于冗雜,并不建議使用

而像函數式創建和類組件創建的區別主要在于需要創建的組件是否需要為有狀態組件:

  • 對于一些無狀態的組件創建,建議使用函數式創建的方式
  • 由于react hooks的出現,函數式組件創建的組件通過使用hooks方法也能使之成為有狀態組件,再加上目前推崇函數式編程,所以這里建議都使用函數式的方式來創建組件

在考慮組件的選擇原則上,能用無狀態組件則用無狀態組件

參考文獻 

https://react.docschina.org/

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

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性能優化

2024-03-12 14:36:44

微服務HTTPRPC

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2024-04-16 08:15:07

CHAR數據字符串

2021-07-08 06:51:29

React函數組件

2021-07-14 08:00:13

reactCss模塊

2021-09-30 07:57:13

排序算法面試

2025-06-03 08:50:00

Static全局變量C 語言

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

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

微信程序方式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 国产a视频 | 国产精品美女久久久 | 91精品久久久久久久久中文字幕 | 又黄又爽的网站 | 成人免费三级电影 | 欧洲亚洲视频 | 在线观看毛片网站 | 日韩免费在线视频 | 亚洲午夜av | 欧美日韩亚洲国产 | 人人操日日干 | 色综合色综合网色综合 | 国产高清一区二区 | 亚洲成人精品国产 | 欧美日本一区 | 高清不卡毛片 | 久久夜色精品国产 | 久久婷婷国产香蕉 | 99精品电影 | 色花av| 欧美成人激情 | av在线免费网站 | 欧美不卡一区二区三区 | 国产乱码精品一区二区三区忘忧草 | 一级片免费在线观看 | 国产精品毛片一区二区在线看 | 日韩av第一页 | 国产精品精品视频一区二区三区 | 欧美一区二区三区在线 | 99精品久久久久久中文字幕 | 精品国产一区久久 | 黄免费观看 | 欧美一区二区三区四区视频 | 亚洲高清一区二区三区 | 精品视频一区二区三区四区 | 国产欧美在线播放 | 69性欧美高清影院 | 久综合 | 精品久久久久香蕉网 | 91一区二区 |