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

Semantic-UI的React實現(三):基本元素組件

開發 開發工具
Semantic-UI中的基本元素均為純CSS類定義的組件,沒有js的操作,因此實現起來比較簡單。有了前面基礎類UiElement和輔助類PropsHelper的實現,要實現一個基本元素組件非常輕松。

[[173784]]

Semantic-UI官方的React組件化已經快要接近完成了,最近開放了官網:http://react.semantic-ui.com/。從官網看,基本組件已經基本完備,還有幾個Addon也在進行中。

基本元素組件

Semantic-UI中的基本元素均為純CSS類定義的組件,沒有js的操作,因此實現起來比較簡單。有了前面基礎類UiElement和輔助類PropsHelper的實現,要實現一個基本元素組件非常輕松。

以Button組件舉例。Button組件可以單獨存在,也可以作為組組件使用。另外Button組件也允許簡單的Animation存在,即一對顯示/隱藏的組件可以隨鼠標狀態而切換。外部調用的大致形式為:

  1. <Button.Group size='small'
  2.  
  3. <Button primary onClick={this.handleClickBtn1}>按鍵1</Button> 
  4.  
  5. <Button color='blue' onClick={this.handleClickBtn2}>按鍵2</Button> 
  6.  
  7. <Button animated onClick={this.handleClickBtn3}> 
  8.  
  9. <Button.Content visible>按鍵3顯示內容</Button> 
  10.  
  11. <Button.Content hidden>按鍵3隱藏內容</Button> 
  12.  
  13. </Button> 
  14.  
  15. </Button.Group

 

調用方式實際上是很直觀的,屬性均作為props傳入到Button組件中,事件系統的回調方法也與普通方式并無二致。相對復雜的處理,是要整理所有組件的共通屬性,定義它們的類型和取值范圍。

Button

Button作為基本組件,有非常多常用的屬性。這些屬性在命名上,基本參照Semantic-UI的原有CSS類名,在Button.js中用常量PROP_TYPES來定義。

  1. const PROP_TYPES = [ 
  2.  
  3. 'primary''secondary''animated''labeled''basic''inverted''color'
  4.  
  5. 'size''fluid''active''disabled''loading''compact''circular''positive'
  6.  
  7. 'negative''floated''attached''iconed''dropdown' 
  8.  
  9. ]; 

 

組件根據PropsHelper的相關方法來生成propTypes定義,并且通過父類(UiElement)的createElementStyle方法來編輯和組裝所使用的CSS類。另外,還通過父類的getEventCallback方法,來聲明相關的事件系統回調處理。

  1. class Button extends UiElement { 
  2.    
  3.   // 類型定義 
  4.   static propTypes = { 
  5.     ...PropsHelper.createPropTypes(PROP_TYPES) 
  6.   }; 
  7.    
  8.   render() { 
  9.    
  10.     // 生成元素style 
  11.     let style = this.createElementStyle(this.props, PROP_TYPES, 'button'); 
  12.      
  13.     return ( 
  14.       <div id={this.props.id} className={style} {...this.getEventCallback()} tabIndex='0'
  15.         {this.props.children} 
  16.       </div> 
  17.     ); 
  18.   } 

 

Button.Group

與Button組件類似,Group組件也繼承于UiElement以生成其聲明的公有屬性對應的CSS類。

  1. // 屬性定義 
  2. const GROUP_PROP_TYPES = [ 
  3.   'iconed''vertical''labeled''equalWidth''color'
  4. ]; 
  5.  
  6. /** 
  7.  * 按鍵組組件 
  8.  */ 
  9. class Group extends UiElement { 
  10.  
  11.   // 類型定義 
  12.   static propTypes = { 
  13.     ...PropsHelper.createPropTypes(GROUP_PROP_TYPES) 
  14.   }; 
  15.  
  16.   /** 
  17.    * 取得渲染內容 
  18.    */ 
  19.   render() { 
  20.  
  21.     // 生成元素Style 
  22.     let style = this.createElementStyle(this.props, PROP_TYPES, 'buttons'); 
  23.  
  24.     return ( 
  25.       <div id={this.props.id} className={style} {...this.getEventCallback()}> 
  26.         {this.props.children} 
  27.       </div> 
  28.     ); 
  29.   } 

 

Button.Content

Content組件的實現更簡單,直接貼代碼。

  1. class Content extends React.Component { 
  2.  
  3.   static propTypes = { 
  4.     visible: React.PropTypes.bool 
  5.   }; 
  6.  
  7.   render() { 
  8.     return ( 
  9.       <div className={this.props.visible ? 'visible content' : 'hidden content'}> 
  10.         {this.props.children} 
  11.       </div> 
  12.     ) 
  13.   } 

 

其他組件

通過以上示例可以看出,有了UiElement和PropsHelper類的處理,基本元素組件的實現是非常簡單的。只需聲明組件所使用的屬性,并使用父類方法編輯和組裝CSS類即可。其他組件如Label,Icon,Image,Grid等,均沿同一思路封裝即可完成。

難點是什么?

在封裝基本元素組件的過程中,我感覺難點在于:

  1. 封裝和抽象元素的共通處理(目前已基本成型)
  2. 管理眾多組件的共通屬性(目前還在摸索中)

看過官方相關處理的源碼,感覺思路還是大體一致的,這點讓我感覺多了一些自信(๑•̀ㅂ•́)و✧

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2016-10-18 21:45:53

Semantic-UIReactJavascript

2016-10-18 21:26:29

Semantic-UIReact架構

2016-10-18 21:31:52

Semantic-UIReact構造模塊

2020-10-18 21:41:34

軟件設計語言開發

2010-06-13 10:56:13

UML文獻

2012-03-15 10:04:06

移動web

2010-09-03 12:55:15

CSSblockinline

2018-01-23 08:24:57

HTTPS服務器加密

2020-12-11 09:38:49

Shell編程開發

2012-12-24 08:50:21

iOSUnity3D

2022-05-11 07:50:15

React UI組件庫前端

2009-07-01 15:08:50

JSP指令和腳本元素

2020-10-21 08:38:47

React源碼

2023-12-28 07:39:58

C#項目框架

2009-06-25 13:03:48

JSF的UI組件

2023-05-31 07:29:46

2019-07-20 23:30:48

開發技能代碼

2021-06-21 15:49:39

React動效組件

2023-07-30 14:56:42

ReactJavaScript開發

2021-03-31 08:01:24

React Portareactcss3
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区在线观看视频 | 亚洲 欧美 日韩 在线 | 国产成人a亚洲精品 | 亚洲精品一区二区三区四区高清 | 国产黄色小视频 | aaa级片 | 亚洲一区二区三区高清 | 亚洲最大av网站 | 成人欧美一区二区三区色青冈 | 一级黄色生活视频 | 久久精品亚洲精品国产欧美kt∨ | 欧美人妖网站 | 精品人伦一区二区三区蜜桃网站 | 在线观看av网站永久 | 熟女毛片 | 99re视频在线观看 | 日韩国产在线 | 免费一级欧美在线观看视频 | 欧美一区二区另类 | 美女在线观看国产 | 91婷婷韩国欧美一区二区 | 嫩草视频入口 | 一区二区电影网 | jlzzxxxx18hd护士| 91 在线 | 天天干,夜夜操 | 精品不卡 | 欧美日韩国产一区二区 | 亚洲品质自拍视频网站 | 在线国产欧美 | 日日爱av | 午夜精品久久 | 伊人精品久久久久77777 | 成人国产在线视频 | 久久久久一区 | 国产精品美女久久久久久不卡 | 亚洲精品在线免费 | 国产欧美精品一区 | 天天躁天天操 | 911精品国产 | 久久一区二区三区四区五区 |