react组件设计原则_React组件设计规则
react的目的是將前端頁面組件化,用狀態機的思維模式去控制組件。組件和組件之間肯定是有關系得,通過合理得組件設計,給每一個組件劃定合適得邊界,可以有效降低當我們對頁面進行重構時對其他組件之間得影響。同時也可以使我們得代碼更加美觀。
1、高耦合低內聚。
高耦合:將功能聯系緊密得部分放到一個容器組件內對外暴漏出index.js,目錄結構如下:
├── components
│ └── App
└── index.js
低內聚:當這個組件在調用頁面直接刪除時,不會觸發任何影響;減少無必要的重復渲染;減小重復渲染時影響得范圍。
2、展示組件和容器組件
展示組件
容器組件
關注事物的展示
關注事物如何工作
可能包含展示和容器組件,并且一般會有DOM標簽和css樣式
可能包含展示和容器組件,并且不會有DOM標簽和css樣式
常常允許通過this.props.children傳遞
提供數據和行為給容器組件或者展示組件
對第三方沒有任何依賴,比如store 或者 flux action
調用flux action 并且提供他們的回調給展示組件
不要指定數據如何加載和變化
作為數據源,通常采用較高階的組件,而不是自己寫,比如React Redux的connect(), Relay的createContainer(), Flux Utils的Container.create()
很少有自己的狀態,即使有,也是自己的UI狀態
這里重點說下this.props.children。通過this.props.children我們很容易讓我們得組件變的低內聚。在實際開發中往往會遇到用純組件寫得展示組件下還有要繼續跟跟數據打交道得容器組件。這里就用this.props.children套上這些容器組件就可以了。然后被套得容器組件可以繼續按照上面得規則新建個文件夾暴漏出index.js這種寫法。
這種寫法得最大好處是你很快就能找到你寫得這個組件是在哪,是干嘛得,影響了哪。
3、從頂部向下得單向數據流
當我們得設計滿足上面這些條件時,使用從頂部向下的單向數據流會讓我們在使用一些類似于redux這種得狀態管理工具時,影響的范圍更加可控,再通過shouldComponentUpdate來減少不必要的渲染。(不過這么寫確實挺麻煩的,但是react從 v16.3開始使用新的生命周期函數getDerivedStateFromProps來強制開發者對這一步進行優化)
4、受控組件和非受控組件
有許多的web組件可以被用戶的交互發生改變,比如:,。這些組件可以通過輸入一些內容或者設置元素的value屬性來改變組件的值。但是,因為React是單向數據流綁定的,這些組件可能會變得失控:
1.一個維護它自己state里的value值的組件無法從外部被修改
2.一個通過props來設置value值的組件只能通過外部控制來更新。
受控組件:
一個受控的應該有一個value屬性。渲染一個受控的組件會展示出value屬性的值。
一個受控的組件不會維護它自己內部的狀態,組件的渲染單純的依賴于props。也就是說,如果我們有一個通過props來設置value的組件,不管你如何輸入,它都只會顯示props.value。換句話說,你的組件是只讀的。
在處理一個受控組件的時候,應該始終傳一個value屬性進去,并且注冊一個onChange的回調函數讓組件變得可變。
非受控組件:
一個沒有value屬性的就是一個非受控組件。通過渲染的元素,任意的用戶輸入都會被立即反映出來。非受控的只能通過OnChange函數來向上層通知自己被用戶輸入的更改。
#### 混合組件:
同時維護props.value和state.value的值。props.value在展示上擁有更高的優先級,state.value代表著組件真正的值。
5、使用高階組件(HOC)
簡單定義:一個接收react組件作為參數返回另外一個組件的函數。
可以做什么:代碼復用,代碼模塊化增刪改props
使用案例:比方說公司突然要給前端代碼不同的點擊埋點,就可以使用hoc包一層,再不改動原來各處代碼得同時進行了合理得改動。
6、增刪改查標準流程
增:填寫數據,驗證數據,插入數據,重新查詢數據列表。
刪:確認刪除,重新查詢數據列表。
查:查詢數據列表,分頁顯示
改:填寫數據,驗證數據,修改數據,重新查詢數據列表
其實設計組件時沒必要過早的組件化。我們可以先快速的寫出一個版本,然后再根據實際設計拆分以應對項目初期的需求快速變更。然后一點一點的按照設計模式去改變我們的項目,只要設計模式合理拆分其實是一個很流暢和自然的事情。
總結
以上是生活随笔為你收集整理的react组件设计原则_React组件设计规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别克陆尊锁车自动关后视镜怎么设置?
- 下一篇: 电厂运维的cis数据_变配电智能化运维作