摘要:的綁定庫包含了容器組件和展示組件相分離的開發(fā)思想。明智的做法是只在最頂層組件如路由操作里使用。其余內(nèi)部組件僅僅是展示性的,所有數(shù)據(jù)都通過傳入。
Redux 的 React 綁定庫包含了 容器組件和展示組件相分離 的開發(fā)思想。明智的做法是只在最頂層組件(如路由操作)里使用 Redux。其余內(nèi)部組件僅僅是展示性的,所有數(shù)據(jù)都通過 props 傳入。
那么為什么需要容器組件和展示組件相分離呢?
這里有個(gè)基本原則:容器組件僅僅做數(shù)據(jù)提取,然后渲染對應(yīng)的子組件,記住這個(gè)點(diǎn),Trust me!
看下面這個(gè)展示列表的例子,不區(qū)分容器和展示組件的情況
// CommentList.js class CommentList extends React.Component { constructor() { super(); this.state = { comments: [] } } componentDidMount() { $.ajax({ url: "/my-comments.json", dataType: "json", success: function(comments) { this.setState({comments: comments}); }.bind(this) }); } render() { return
可用性:CommentList不可以復(fù)用
數(shù)據(jù)結(jié)構(gòu):組件應(yīng)該對所需要的數(shù)據(jù)有所預(yù)期,但這里其實(shí)沒有,PropTypes可以很好的做到這一點(diǎn)
那么來看下分離的情況:
// CommentListContainer.js class CommentListContainer extends React.Component { constructor() { super(); this.state = { comments: [] } } componentDidMount() { $.ajax({ url: "/my-comments.json", dataType: "json", success: function(comments) { this.setState({comments: comments}); }.bind(this) }); } render() { return; } } // CommentList.js class CommentList extends React.Component { constructor(props) { super(props); } render() { return
這樣就做到了數(shù)據(jù)提取和渲染分離,CommentList可以復(fù)用,CommentList可以設(shè)置PropTypes判斷數(shù)據(jù)的可用性
來看下容器組件和展示組件的區(qū)別:
展示組件 | 容器組件 |
---|---|
關(guān)注事物的展示 | 關(guān)注事物如何工作 |
可能包含展示和容器組件,并且一般會有DOM標(biāo)簽和css樣式 | 可能包含展示和容器組件,并且不會有DOM標(biāo)簽和css樣式 |
常常允許通過this.props.children傳遞 | 提供數(shù)據(jù)和行為給容器組件或者展示組件 |
對第三方?jīng)]有任何依賴,比如store 或者 flux action | 調(diào)用flux action 并且提供他們的回調(diào)給展示組件 |
不要指定數(shù)據(jù)如何加載和變化 | 作為數(shù)據(jù)源,通常采用較高階的組件,而不是自己寫,比如React Redux的connect(), Relay的createContainer(), Flux Utils的Container.create() |
僅通過屬性獲取數(shù)據(jù)和回調(diào) | |
很少有自己的狀態(tài),即使有,也是自己的UI狀態(tài) | |
除非他們需要的自己的狀態(tài),生命周期,或性能優(yōu)化才會被寫為功能組件 |
優(yōu)勢:
展示和容器更好的分離,更好的理解應(yīng)用程序和UI
重用性高,展示組件可以用于多個(gè)不同的state數(shù)據(jù)源
展示組件就是你的調(diào)色板,可以把他們放到多帶帶的頁面,在不影響應(yīng)用程序的情況下,讓設(shè)計(jì)師調(diào)整UI
迫使你分離標(biāo)簽,達(dá)到更高的可用性
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80349.html
摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書簽整理,不求最多最全,但求最實(shí)用。 書簽源碼 書簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:劃分標(biāo)準(zhǔn)根據(jù)稿,不同的展示模塊分為不同的組件。比如頂部底部導(dǎo)航列表等容器組件業(yè)務(wù)組件與數(shù)據(jù)源后臺本地存儲進(jìn)行數(shù)據(jù)傳輸操作不止是劃分標(biāo)準(zhǔn)根據(jù)業(yè)務(wù)功能劃分。最常見的是列表組件。 為什么要拆分組件 提高可讀性、可維護(hù)性 如果不拆分 代碼量大,所有內(nèi)容集中在一起 相同組件無法復(fù)用 業(yè)務(wù)開發(fā)分工不明確,開發(fā)人員要關(guān)心非業(yè)務(wù)的代碼 改代碼時(shí),可能會影響其他業(yè)務(wù),牽一發(fā)動全身(耦合) 任何一個(gè)操作...
摘要:展示組件與容器組件的綁定庫的基本開發(fā)思想是展示組件與容器組件相分離。技術(shù)上講,容器組件就是使用從樹中讀取部分?jǐn)?shù)據(jù),并通過來把這些數(shù)據(jù)提供給要渲染的組件。 說明:閱讀本篇文章需要對Redux有一定的了解,對Redux不了解的同學(xué)可先看看這篇文章Redux技術(shù)架構(gòu)簡介(一) 1. React中引入react-redux 為了讓Redux和React更好的配合,F(xiàn)acebook專門開發(fā)了一個(gè)...
摘要:在初步完成了在線流程圖編輯工具之后又接到了在線搭建頁面工具的需求剛開始其實(shí)并不想接項(xiàng)目因?yàn)閺臍v史以及現(xiàn)實(shí)原因來看個(gè)性化及動態(tài)渲染都是很難解決的痛點(diǎn)各種頁面搭建工具的不溫不火早已說明了這條路并沒有這么好走但從另一個(gè)方面來說既然有了這樣的需求那 在初步完成了在線流程圖編輯工具之后,又接到了在線搭建頁面工具的需求,剛開始其實(shí)并不想接項(xiàng)目,因?yàn)閺臍v史以及現(xiàn)實(shí)原因來看,個(gè)性化及動態(tài)渲染都是很難解決的痛...
摘要:作者滬江前端開發(fā)工程師本文原創(chuàng)翻譯,有不當(dāng)?shù)牡胤綒g迎指出。管理數(shù)據(jù),而提供服務(wù)器上的數(shù)據(jù),因此應(yīng)用于處理網(wǎng)絡(luò)請求。結(jié)論使用建立的應(yīng)用都是模塊化的會成為其中一個(gè)模塊,庫是另一個(gè)模塊。原文原創(chuàng)新書移動前端高效開發(fā)實(shí)戰(zhàn)已在亞馬遜京東當(dāng)當(dāng)開售。 作者:Oral (滬江Web前端開發(fā)工程師)本文原創(chuàng)翻譯,有不當(dāng)?shù)牡胤綒g迎指出。轉(zhuǎn)載請指明出處。 當(dāng)你問起有關(guān)AJAX與React時(shí),老司機(jī)們首先就會...
閱讀 1084·2021-11-24 09:39
閱讀 1317·2021-11-18 13:18
閱讀 2452·2021-11-15 11:38
閱讀 1836·2021-09-26 09:47
閱讀 1639·2021-09-22 15:09
閱讀 1632·2021-09-03 10:29
閱讀 1520·2019-08-29 17:28
閱讀 2961·2019-08-29 16:30