亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

【React全家桶入門之七】提取布局組件

2024-04-27 15:05:51
字體:
來源:轉載
供稿:網友

是時候來優化一下我們的代碼了。

前面的文章提到過:重復代碼是混亂的根源!,本篇文章我們來繼續消滅重復代碼。

目標

細心的同學應該能發現:每一個Page組件/src/pages下的組件)的render方法都擁有相似的jsx結構,比如:

render () { return ( <div> <header> <h1>...</h1> </header> <main> ... </main> </div> );}

每一個頁面都包含一個頁面的標題(header標簽和h1標簽),并且頁面的主要部分都被放在了一個main標簽中。

現在很多網站的設計都是如此:大部分頁面都有相似的header和footer,不同的是中間部分的內容。

既然是這些部分都是相似的,那么在每一個地方都重復寫一遍就顯得太沒水平了,stupid!

怎么用一份代碼來渲染這些相同的地方,并且也能夠滿足不同的頁面之間一些差異化的配置呢(如本文中各頁面標題不同)?

傳統的MVC Web應用可以通過模板引擎的模板頁(layout)來達到這樣的效果。

使用React,我們可以使用布局組件來解決這個問題。

布局組件

新建/src/layouts目錄用來存放布局組件,新建HomeLayout.js文件:

import React from 'react';class HomeLayout extends React.Component { render () { const {title, children} = this.PRops; return ( <div> <header> <h1>{title}</h1> </header> <main> {children} </main> </div> ); }}export default HomeLayout;

我們把每個頁面中通用的部分提取到了HomeLayout組件中,在HomeLayout中使用props.title來維護頁面的標題文本。

使用props.children來渲染每個頁面特有的內容部分。

現在我們可以這樣來渲染HomePage:

<HomeLayout title="Welcome"> <Link to="/user/list">用戶列表</Link> <br/> <Link to="/user/add">添加用戶</Link></HomeLayout>

HomeLayout里面的內容會作為HomeLayout的props.children渲染到最終的頁面上。

重構頁面組件

主頁

...import HomeLayout from '../layouts/HomeLayout';class Home extends React.Component { render () { return ( <HomeLayout title="Welcome"> <Link to="/user/list">用戶列表</Link> <br/> <Link to="/user/add">添加用戶</Link> </HomeLayout> ); }}...

用戶添加頁面

...import HomeLayout from '../layouts/HomeLayout';class UserAdd extends React.Component { handleSubmit (e) { ... } render () { ... return ( <HomeLayout title="添加用戶"> <form onSubmit={(e) => this.handleSubmit(e)}> ... </form> </HomeLayout> ); }}...

用戶列表頁面

...import HomeLayout from '../layouts/HomeLayout';class UserList extends React.Component { constructor (props) { ... } componentWillMount () { ... } render () { ... return ( <HomeLayout title="用戶列表"> <table> ... </table> </HomeLayout> ); }}...

總結

現在我們已經把3個頁面組件的重復部分使用HomeLayout來替代了,是不是覺得代碼又變得干凈了很多呢?

請像潔癖一樣對待自己的代碼。

你以為頁面重構就到此為止了嗎?

現在每一個頁面都要先import HomeLayout組件,然后將頁面內容使用HomeLayout組件包裹起來。

如果你足夠“潔癖”,這里也應該成為你“清掃”的目標。

怎么做?

// /src/index.js...ReactDOM.render(( <Router history={hashHistory}> <Route path="/" component={HomeLayout> <Route path="/" component={HomePage}/> <Route path="/user/add" component={UserAddPage}/> <Route path="/user/list" component={UserListPage}/> </Route> </Router>), document.getElementById('app'));

我們可以給每個需要使用HomeLayout布局的頁面路由添加一個component為HomeLayout的父路由,其效果等同于:

當url為”/”:

<HomeLayout> <HomePage/></HomeLayout>

當url為”/user/add”:

<HomeLayout> <UserAddPage/></HomeLayout>

當url為”/user/list”:

<HomeLayout> <UserListPage/></HomeLayout>

HomeLayout將會根據當前的url從props.children接收到相應的組件內容。

這樣做可以解除每個頁面與HomeLayout之間的耦合,但也有一些問題:

title怎么辦?(使用react context api)有的頁面組件需要添加一個額外的根節點(如/src/pages/Home.js)

這里不再進行進一步的講解,自己動手試試?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
不卡伊人av在线播放| 亚洲91精品在线| 欧美激情按摩在线| 国产精品国产三级国产专播精品人| 91在线色戒在线| 啊v视频在线一区二区三区| 日韩欧美一区二区三区久久| 欧美日韩激情美女| 欧美日韩精品在线观看| 亚洲国产日韩精品在线| 在线精品播放av| 亚洲精品国产精品乱码不99按摩| 美女福利精品视频| 国产中文字幕日韩| 国产精品久久久久久久久免费| 国外成人免费在线播放| 永久免费看mv网站入口亚洲| 久久69精品久久久久久久电影好| 91国产精品视频在线| 这里只有精品在线观看| 欧美日韩国产在线播放| 国产热re99久久6国产精品| 91成人性视频| 久久午夜a级毛片| www.99久久热国产日韩欧美.com| 国产精品一区二区久久精品| 国产欧美精品xxxx另类| 日韩精品视频在线免费观看| 97福利一区二区| 精品久久国产精品| 亚洲精品99久久久久| 91亚洲精品视频| 欧美日韩精品国产| 国产精品免费在线免费| 成人淫片在线看| 久久91亚洲精品中文字幕奶水| 欧美亚洲国产日本| 亚洲人成电影网站色xx| wwwwwwww亚洲| 久久精品亚洲热| 成人免费淫片aa视频免费| 播播国产欧美激情| 久久精品视频导航| 国产精品美女免费| 97人人爽人人喊人人模波多| 国产精品揄拍500视频| 久久在线视频在线| 久久躁日日躁aaaaxxxx| 欧美午夜xxx| 亚洲大胆美女视频| 韩曰欧美视频免费观看| 色偷偷噜噜噜亚洲男人的天堂| 欧美福利视频在线观看| 亚洲国产欧美精品| 亚洲精品黄网在线观看| 91精品国产自产在线老师啪| 超碰日本道色综合久久综合| 亚洲经典中文字幕| 影音先锋欧美精品| 亚洲国产精品系列| 日韩视频在线免费| 午夜精品久久17c| 91伊人影院在线播放| 在线a欧美视频| 精品激情国产视频| 欧美人与性动交a欧美精品| 91av视频在线免费观看| 国产热re99久久6国产精品| 久久精品精品电影网| 欧美成人亚洲成人| 欧美日韩在线第一页| 国产精品情侣自拍| 精品国产依人香蕉在线精品| 91成人国产在线观看| 亚洲精品福利在线| 成人在线国产精品| 久久精品福利视频| 亚洲高清av在线| 久久久精品久久久| 久久91超碰青草是什么| 69影院欧美专区视频| 亚洲精品98久久久久久中文字幕| 成人性教育视频在线观看| 久久99久久久久久久噜噜| 亚洲另类激情图| 精品呦交小u女在线| 亚洲自拍偷拍视频| 7777免费精品视频| 国产精品美女久久久久久免费| 欧美日韩国产中文字幕| 欧美二区乱c黑人| 亚洲乱码国产乱码精品精天堂| 欧美性猛交xxxxx免费看| 国产精品久久久一区| 日韩精品视频在线播放| 亚洲精品成人久久电影| 欧美日韩黄色大片| 亚洲丁香婷深爱综合| 国产精品久久久91| 亚洲欧美日韩精品久久| 亚洲美女黄色片| 精品毛片网大全| 欧美尺度大的性做爰视频| 久久久久久69| 久久人体大胆视频| 国产精品揄拍500视频| 亚洲国产精品久久91精品| 亚洲专区中文字幕| 欧洲一区二区视频| 久青草国产97香蕉在线视频| 日韩成人网免费视频| 久热99视频在线观看| 中文字幕欧美精品在线| 91精品久久久久久久久中文字幕| 国产视频丨精品|在线观看| 色99之美女主播在线视频| 精品日韩美女的视频高清| 91九色蝌蚪国产| 日本免费在线精品| 欧美性猛交xxxx免费看| 午夜欧美不卡精品aaaaa| 丝袜美腿精品国产二区| 亚洲字幕在线观看| 欧美超级乱淫片喷水| 亚洲一级黄色片| 国产成人福利夜色影视| 国产精品999999| 中文字幕综合一区| 日韩激情av在线播放| 热99精品只有里视频精品| 55夜色66夜色国产精品视频| 深夜福利国产精品| 国产一区欧美二区三区| www.久久色.com| 国产欧美日韩免费| 色先锋久久影院av| 欧美视频裸体精品| 尤物九九久久国产精品的分类| www高清在线视频日韩欧美| 亚洲国产精品系列| 茄子视频成人在线| 亚洲一区二区三| 97视频在线观看免费高清完整版在线观看| 亚洲欧美日本另类| 97成人精品区在线播放| 亚洲国产精品一区二区三区| 久久久久久久久久久久久久久久久久av| 欧美黑人xxxx| 亚洲最新av在线网站| 岛国av一区二区在线在线观看| 欧美天天综合色影久久精品| 国产一区二区三区在线观看视频| 国产伊人精品在线| 亚洲a级在线播放观看| 国产精品v片在线观看不卡| 国自在线精品视频| 97精品久久久中文字幕免费| 欧美激情网友自拍| 在线亚洲欧美视频| 精品国偷自产在线视频| 性欧美亚洲xxxx乳在线观看| 亚洲自拍偷拍福利| 日本午夜在线亚洲.国产| 欧美激情在线视频二区|