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

關于React 組件的開發實踐

開發 前端 新聞
本文從 API 層面歸納出 6 種組件類型,分析其優缺點和適用場景,為日常組件開發提供一個方法指南。

基于 React 的組件化開發方式,為富前端 web 應用提供大量技術實踐,社區逐漸形成了穩定的組件規范,本文從 API 層面歸納出 6 種組件類型,分析其優缺點和適用場景,為日常組件開發提供一個方法指南。6 種類型分別為結構型組件、樣式型組件、組合型組件、配置型組件、受控型組件、非受控組件。

結構型組件與樣式型組件

結構型組件定義了組件大體結構,結構的具體實現由外部傳遞。樣式型組件確定了組件結構細節,外部只需傳遞參數即可渲染預期樣式。樣式型組件是較為常用的組件類型,很少有開發者會根據一份設計稿來推斷組件未來可能的改動,這也導致了樣式型組件在復用性與拓展性上偏弱。對于比較通用的組件,例如 Button 按鈕、Modal 彈框、Form 表單等,不應僅提供樣式型實現,應該抽象出結構型組件。

這兩種類型并不是非此即彼的關系,樣式型組件固定的 API 參數可以降低使用成本,結構型組件彈性的 API 設定可以提供擴展性,結合兩者的優點可以構造出既簡單又可拓展的組件。關于兩者結合的優勢最具說服力的實踐是通用組件庫,結構型組件可顯著降低業務方的溝通成本與接入風險,如下示意圖演示了業務方與組件庫之間的兩種溝通模型:

樣式型組件庫與業務方的溝通模型

 

結構型組件庫與業務方的溝通模型

 

以上兩種模型每一個箭頭為一個工時,樣式型組件庫完成一次需求變更需要三個工時,業務方要等待組件庫實現功能后才能進行下一步。結構型組件庫給予業務方更多的自主性,不用等待組件庫實現新特性,通過自定義結構滿足當前需求,組件庫有充足的時間分析需求是否通用,是否值得提供新 API,結構型組件在這個過程中扮演了緩沖區的角色,使得業務方與組件庫可以并行協同開發,確保各自的研發效率與節奏。

組合型組件與配置型組件

組合型組件以 JSX 為主體,通過組件間的嵌套組合描述業務邏輯。配置型組件通過 props 傳遞數據結構,組件內部根據預先設定好的邏輯渲染視圖。日常開發傾向于寫配置型組件,組合型組件更多的出現在通用組件庫中。

組合型組件結構清晰,擴展性高,組件使用者通過閱讀 JSX 的 render 函數即可了解業務邏輯,但組件間聯系微弱,ref 引用相互隔離,難以構建復雜的交互組件。配置型組件需要寫的代碼量少,但組件內部渲染處于黑箱,使用者難以理解組件邏輯,使其在拓展性上偏弱。比較基礎的組件,例如 Form 表單,Select 選框等,建議采用組合型,有利于使用者組織業務代碼,復雜交互組件可使用配置型。

組合型組件最具代表性的實踐是 Ant Design,整個組件庫的 API 設計嚴格遵循組合型優先原則,為同一組件的不同位面分別提供組合型結構,使其在拓展性和易用性上都達到了很高的水準。如下示意圖演示了用兩種組件類型開發 Select 選框的演化模型。

Select 簡單選框,組合型與配置型,都能提供清晰易用的接口

 

比較復雜的 Select 選框組,組合型組件通過提供新的子組件,仍可保持簡潔的 API 調用。配置型組件有兩種實現方式:提供新的屬性或者擴展原屬性,兩種方式都會產生一定認知成本。

 

對于需要自定義的 Select 選框組,組合型組件得益于 JSX 的嵌套結構,可以很從容的提供自定義 API。配置型組件實現同樣的功能,需要再一次拓展屬性配置。

 

受控型組件與非受控組件

這兩種類型有另一種表述:無狀態組件和有狀態組件。受控型組件內部只負責展示,僅對外提供回調,以表達改變的期望,其最終行為完全由外部驅動。非受控組件由內部處理某些行為,并不強制外部狀態同步。官方推薦輸出無狀態受控組件,但是有狀態的組件在項目開發中仍是必要的。

受控型組件在自身層面規范了單向數據流,可以與其他數據層框架整合,但是開發一個復雜的受控型組件,開發者可能需要向外提供數不清的接口與回調。非受控組件較為智能,組件可以自主維護狀態,但開發者常常因此懶于做狀態同步,上層組件重新渲染時,非受控組件會丟失內部的狀態,失憶,日常開發中大多數的 bug 因此而來。

我們經常會以內部是否擁有 state 來衡量一個受控型組件與非受控組件,但是完全遵守這條標準將很難提供一個簡單易用的大型受控組件,所有狀態都由外部控制,使用者需要寫大量配置代碼才能跑通一個大型組件,使用成本極高。官方提供的解決方案通過兩者結合的方式來處理受控與易用的矛盾,如下示意圖展示了一個 Input 組件可以接受的參數類型。

按照類型定義可推導出如下三種使用方式,分別對應一種受控型用法,和兩種非受控用法。

 

開發一個受控與非受控兼具的組件,對組件本身的開發與維護有更高的要求,其難度隨組件本身復雜度的增加而增加。但是對組件使用者來說,這種兩者兼具的組件最能適應快速開發與后期代碼調優。任何有輸入輸出特性的組件(各種表單,配置 + 回調組件),都可參照上述類型定義提供 API。

總結

React 組件本質上是 JS 函數的另一種形態,一切與函數有關的思想都可以反映在組件里,每一種組件都有其適用場景,開發一個大型 Web 項目需要搭配使用不同類型的組件,如何做出合適搭配則需要長時間的開發積累,在真正的項目里尋找最優解。

責任編輯:張燕妮 來源: Tencent AlloyTeam
相關推薦

2019-07-22 10:42:11

React組件前端

2017-02-28 21:57:05

React組件

2017-05-17 15:50:34

開發前端react

2020-08-13 06:43:41

React前端開發

2017-04-12 10:04:18

Scrum實踐終結

2023-07-21 01:12:30

Reactfalse?變量

2022-06-30 13:56:05

Rating鴻蒙

2023-04-20 10:15:57

React組件Render

2021-02-02 08:11:50

火焰圖組件技術

2025-04-07 08:25:01

React復合組件組件模式

2017-05-02 21:08:35

開發架構工程師

2020-06-01 09:40:06

開發ReactTypeScript

2020-06-03 16:50:24

TypeScriptReact前端

2022-08-19 09:01:59

ReactTS類型

2016-11-25 13:50:15

React組件SFC

2022-05-13 08:48:50

React組件TypeScrip

2023-12-21 10:26:30

??Prettier

2021-02-16 08:45:10

React前端代碼

2024-10-21 15:39:24

2023-07-25 11:22:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品在线视频 | 国产精品揄拍一区二区久久国内亚洲精 | 国产精品日产欧美久久久久 | 四虎成人精品永久免费av九九 | 国产精品久久久久久模特 | 在线亚洲电影 | 国产精品成人一区二区三区 | 91精品国产一区二区在线观看 | 日本特黄a级高清免费大片 成年人黄色小视频 | 九九亚洲 | 久久久久国产精品一区二区 | 国精产品一品二品国精在线观看 | 91久久夜色 | 国产精品欧美大片 | 五月天天色| 欧美在线a | 亚洲精品一区在线观看 | 中文字幕亚洲精品 | 综合色婷婷| 欧美日韩不卡合集视频 | 亚洲一区在线观看视频 | a在线视频 | 91免费版在线 | 一区二区三区中文字幕 | 国产中文视频 | 亚洲午夜av久久乱码 | 一区二区三区视频在线 | 日韩精品在线一区 | 成人在线视频观看 | 亚洲人免费视频 | 国产中文字幕网 | 日本成人在线免费视频 | 日本在线观看视频 | 亚洲综合色丁香婷婷六月图片 | 日本a在线| 免费观看一级毛片 | 国产成人网 | 国产日韩精品一区二区 | 免费国产一区二区 | 99精品一区二区 | 欧美极品少妇xxxxⅹ免费视频 |