<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用ReactRouterv4案例解析(附代碼)

        來源:懂視網 責編:小采 時間:2020-11-27 19:38:41
        文檔

        使用ReactRouterv4案例解析(附代碼)

        使用ReactRouterv4案例解析(附代碼):這次給大家帶來使用React Router v4案例解析(附代碼),使用React Router v4案例解析的注意事項有哪些,下面就是實戰案例,一起來看一下。距離React Router v4 正式發布也已經過去三個月了,這周把一個React的架子做了升級,之前的路由用的還是v2.7.
        推薦度:
        導讀使用ReactRouterv4案例解析(附代碼):這次給大家帶來使用React Router v4案例解析(附代碼),使用React Router v4案例解析的注意事項有哪些,下面就是實戰案例,一起來看一下。距離React Router v4 正式發布也已經過去三個月了,這周把一個React的架子做了升級,之前的路由用的還是v2.7.
        這次給大家帶來使用React Router v4案例解析(附代碼),使用React Router v4案例解析的注意事項有哪些,下面就是實戰案例,一起來看一下。

        距離React Router v4 正式發布也已經過去三個月了,這周把一個React的架子做了升級,之前的路由用的還是v2.7.0版的,所以決定把路由也升級下,正好“嘗嘗鮮”...

        江湖傳言,目前官方同時維護 2.x 和 4.x 兩個版本。(ヾ(??﹏?)??咦,此刻相信機智如我的你也會發現,ReactRouter v3 去哪兒了?整丟了??巴拉出鍋了???敢不敢給我個完美的解釋???)事實上 3.x 版本相比于 2.x 并沒有引入任何新的特性,只是將 2.x 版本中部分廢棄 API 的 warning 移除掉而已。按照規劃,沒有歷史包袱的新項目想要使用穩定版的 ReactRouter 時,應該使用 ReactRouter 3.x。目前 3.x 版本也還處于 beta 階段,不過會先于 4.x 版本正式發布。如果你已經在使用 2.x 的版本,那么升級 3.x 將不會有任何額外的代碼變動。

        禮貌性簡介下

        React Router V4 相較于前面三個版本有根本性變化,首先是遵循 Just Component 的 API 設計理念,其次API方面也精簡了不少,對新手來說降低了學習難度,但如果是對之前項目的重構,嗯,簡直無**可說。本次升級的主要特點如下:

      1. 聲明式(Declarative)

      2. 可組合 (Composability)

      3. React Router V4 遵循了 React 的理念: 萬物皆組件 。因此 升級之后的 Route、Link、Switch等都是一個普通的組件。

        React Router V4 基于 Lerna 管理多個 Repository。在此代碼庫包括:

        1. react-router React Router 核心

        2. react-router-dom 用于 DOM 綁定的 React Router

        3. react-router-native 用于 React Native 的 React Router

        4. react-router-redux React Router 和 Redux 的集成

        5. react-router-config 靜態路由配置幫助助手

        插件初引入

        通常我們在 React 的使用中,一般要引入兩個包, reactreact-dom ,那么 react-routerreact-router-dom 是不是兩個都要引用呢? 注意,前方高能,入門第一坑就在這里 。他們兩個只要引用一個就行了,不同之處就是后者比前者多出了 <Link> <BrowserRouter> 這樣的 DOM 類組件。因此我們只需引用 react-router-dom 這個包就OK了。當然,如果搭配 redux ,你還需要使用 react-router-redux

        主要組件簡介

        在4.0之前版本的 API 中, <Router> 組件的 children 只能是 React Router 提供的各種組件,如 <Route>、<IndexRoute>、<Redirect> 等。而在 React Router 4 中,你可以將各種組件及標簽放進 <Router> 組件中,他的角色也更像是 Redux 中的 <Provider> 。**不同的是 <Provider> 是用來保持與 store 的更新,而 <Router> 是用來保持與 location 的同步。**示例如下:

        // 示例1
        <Router>
         <p>
         <ul>
         <li><Link to="/">首頁</Link></li>
         <li><Link to="/about">關于</Link></li>
         <li><Link to="/topics">主題列表</Link></li>
         </ul>
         <hr/>
         <Route exact path="/" component={Home}/>
         <Route path="/about" component={About}/>
         <Route path="/topics" component={Topics}/>
         </p>
         </Router>

        Router是所有路由組件共用的底層接口,一般我們的應用并不會使用這個接口,而是使用高級的路由:

        1. <BrowserRouter> :使用 HTML5 提供的 history API 來保持 UI 和 URL 的同步;

        2. <HashRouter> :使用 URL 的 hash (例如:window.location.hash) 來保持 UI 和 URL 的同步;

        3. <MemoryRouter> :能在內存保存你 “URL” 的歷史紀錄(并沒有對地址欄讀寫);

        4. <NativeRouter> :為使用React Native提供路由支持;

        5. <StaticRouter> :從不會改變地址;

        TIPS:算是第二坑吧,和之前的Router不一樣,這里 <Router> 組件下只允許存在一個子元素,如存在多個則會報錯。

        反面典型在這里:

        <Router>
         <ul>
         <li><Link to="/">首頁</Link></li>
         <li><Link to="/about">關于</Link></li>
         <li><Link to="/topics">主題列表</Link></li>
         </ul>
         <hr/>
         <Route exact path="/" component={Home}/>
         <Route path="/about" component={About}/>
         <Route path="/topics" component={Topics}/>
         </Router>

        沒錯,示例2在沒有 <p> 爸爸的保護下,會報如下異常信息:

        我們知道,Route組件主要的作用就是當一個location匹配路由的path時,渲染某些UI。示例如下:

        <Router>
         <p>
         <Route exact path="/" component={Home}/>
         <Route path="/news" component={NewsFeed}/>
         </p>
        </Router>
        // 如果應用的地址是/,那么相應的UI會類似這個樣子:
        <p>
         <Home/>
        </p>
        // 如果應用的地址是/news,那么相應的UI就會成為這個樣子:
        <p>
         <NewsFeed/>
        </p>

        <Route> 組件有如下屬性:

        1. path(string): 路由匹配路徑。(沒有path屬性的Route 總是會 匹配);

        2. exact(bool):為true時,則要求路徑與location.pathname必須完全匹配;

        3. strict(bool):true的時候,有結尾斜線的路徑只能匹配有斜線的location.pathname;

        再次奉上兩個鮮活的例子:

        exact配置:


        路徑location.pathnameexact是否匹配
        /one/one/twotrue
        /one/one/twofalse

        strict配置:

        路徑location.pathnamestrict是否匹配
        /one//onetrue
        /one//one/true
        /one//one/twotrue

        同時,新版的路由為 <Route> 提供了三種渲染內容的方法:

        1. <Route component> :在地址匹配的時候React的組件才會被渲染,route props也會隨著一起被渲染;

        2. <Route render> :這種方式對于內聯渲染和包裝組件卻不引起意料之外的重新掛載特別方便;

        3. <Route children> :與render屬性的工作方式基本一樣,除了它是不管地址匹配與否都會被調用;

        第一種方式沒啥可說的,和之前一樣,這里我們重點看下 <Route render> 的渲染方式:

        // 行內渲染示例
        <Route path="/home" render={() => <p>Home</p>}/>
        // 包裝/合成
        const FadingRoute = ({ component: Component, ...rest }) => (
         <Route {...rest} render={props => (
         <FadeIn>
         <Component {...props}/>
         </FadeIn>
         )}/>
        )
        <FadingRoute path="/cool" component={Something}/>

        TIPS: 第三坑! <Route component> 的優先級要比 <Route render> 高,所以不要在同一個 <Route> 中同時使用這兩個屬性。

        和之前版本沒太大區別,重點看下組件屬性:

        1. to(string/object):要跳轉的路徑或地址;

        2. replace(bool): 為 true 時 ,點擊鏈接后將使用新地址替換掉訪問歷史記錄里面的原地址; 為 false 時 ,點擊鏈接后將在原有訪問歷史記錄的基礎上添加一個新的紀錄。 默認為 false ;

        示例如下:

        // Link組件示例
        // to為string
        <Link to="/about">關于</Link>
        // to為obj
        <Link to={{
         pathname: '/courses',
         search: '?sort=name',
         hash: '#the-hash',
         state: { fromDashboard: true }
        }}/>
        // replace 
        <Link to="/courses" replace />

        <NavLink><Link> 的一個特定版本, 會在匹配上當前 URL 的時候會給已經渲染的元素添加樣式參數,組件屬性:

        1. activeClassName(string):設置選中樣式,默認值為 active;

        2. activeStyle(object):當元素被選中時, 為此元素添加樣式;

        3. exact(bool):為 true 時, 只有當地址完全匹配 class 和 style 才會應用;

        4. strict(bool):為 true 時,在確定位置是否與當前 URL 匹配時,將考慮位置 pathname 后的斜線; isActive(func):判斷鏈接是否激活的額外邏輯的功能;

        從這里我們也可以看出,新版本的路由在組件化上面確實下了不少功夫,來看看NavLink的使用示例:

        // activeClassName選中時樣式為selected
        <NavLink
         to="/faq"
         activeClassName="selected"
        >FAQs</NavLink>
        // 選中時樣式為activeStyle的樣式設置
        <NavLink
         to="/faq"
         activeStyle={{
         fontWeight: 'bold',
         color: 'red'
         }}
        >FAQs</NavLink>
        // 當event id為奇數的時候,激活鏈接
        const oddEvent = (match, location) => {
         if (!match) {
         return false
         }
         const eventID = parseInt(match.params.eventID)
         return !isNaN(eventID) && eventID % 2 === 1
        }
        <NavLink
         to="/events/123"
         isActive={oddEvent}
        >Event 123</NavLink>

        該組件用來渲染匹配地址的第一個 <Route> 或者 <Redirect> 。那么它與使用一堆route又有什么區別呢?

        <Switch> 的獨特之處是獨它僅僅渲染一個路由。相反地,每一個包含匹配地址(location)的 <Route> 都會被渲染。思考下面的代碼:

        <Route path="/about" component={About}/>
        <Route path="/:user" component={User}/>
        <Route component={NoMatch}/>

        如果現在的URL是 /about ,那么 <About> , <User> , 還有 <NoMatch> 都會被渲染,因為它們都與路徑(path)匹配。這種設計,允許我們以多種方式將多個 <Route> 組合到我們的應用程序中,例如側欄(sidebars),面包屑(breadcrumbs),bootstrap tabs等等。 然而,偶爾我們只想選擇一個 <Route> 來渲染。如果我們現在處于 /about ,我們也不希望匹配 /:user (或者顯示我們的 “404” 頁面 )。以下是使用 Switch 的方法來實現:

        <Switch>
         <Route exact path="/" component={Home}/>
         <Route path="/about" component={About}/>
         <Route path="/:user" component={User}/>
         <Route component={NoMatch}/>
        </Switch>

        現在,如果我們處于 /about , <Switch> 將開始尋找匹配的 <Route> 。 <Route path="/about"/> 將被匹配, <Switch> 將停止尋找匹配并渲染 <About> 。同樣,如果我們處于 /michael , <User> 將被渲染。

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        正則中句號使用范疇有哪些

        JS使用createElement()動態添加HTML

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用ReactRouterv4案例解析(附代碼)

        使用ReactRouterv4案例解析(附代碼):這次給大家帶來使用React Router v4案例解析(附代碼),使用React Router v4案例解析的注意事項有哪些,下面就是實戰案例,一起來看一下。距離React Router v4 正式發布也已經過去三個月了,這周把一個React的架子做了升級,之前的路由用的還是v2.7.
        推薦度:
        標簽: 代碼 解析 v4
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成a人无码亚洲成www牛牛| 18gay台湾男同亚洲男同| 亚洲日韩精品国产一区二区三区 | 亚洲av无码一区二区三区乱子伦| 亚洲av永久无码精品秋霞电影秋| 毛片在线看免费版| 亚洲一本到无码av中文字幕 | 曰批全过程免费视频播放网站 | 69视频在线观看免费| 久久综合亚洲鲁鲁五月天| 18禁美女裸体免费网站| 亚洲综合在线观看视频| 国产精品1024永久免费视频| 亚洲精品亚洲人成在线观看麻豆| 黄色网址免费大全| 亚洲狠狠婷婷综合久久蜜芽| 四虎成人精品在永久免费| eeuss影院免费92242部| 亚洲gv白嫩小受在线观看| 97视频免费在线| 狠狠综合亚洲综合亚洲色| 亚洲中文字幕无码专区| 国外成人免费高清激情视频| 亚洲av无码专区在线电影天堂| 亚洲国产成人五月综合网 | 亚洲六月丁香六月婷婷蜜芽| 成人黄动漫画免费网站视频| 久久久亚洲精华液精华液精华液 | 色播在线永久免费视频网站| 亚洲国产香蕉碰碰人人| 成人毛片18女人毛片免费96| 黄色网址在线免费观看| 亚洲欧洲国产精品你懂的| 成人免费看黄20分钟| APP在线免费观看视频| 精品亚洲成在人线AV无码| 亚洲免费日韩无码系列 | 久久99精品免费视频| 一本色道久久综合亚洲精品蜜桃冫| 亚洲AV中文无码乱人伦在线视色 | 国产亚洲福利一区二区免费看|