国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ReactRouter升級 v2 to v4

JasonZhang / 2386人閱讀

摘要:概述相對于幾乎是重寫了新版的更偏向于組件化。汲取了很多思想,路由即是組件,使路由更具聲明式,且方便組合。如果你習慣使用,那么一定會很快上手新版的。被一分為三。不止是否有意義參考資料遷移到關注點官方文檔

概述

react-router V4 相對于react-router V2 or V3 幾乎是重寫了, 新版的react-router更偏向于組件化(everything is component)。

V4汲取了很多思想,路由即是組件,使路由更具聲明式,且方便組合。如果你習慣使用react,那么一定會很快上手新版的react-router

react-router V4 被一分為三: react-router-dom(for web)、react-router-native(for native)、react-router(core)。但如果僅在瀏覽器中使用的話,一般只需要用到react-router-dom就可以了。

改動點 1. Router/Route 的改變
// V2 or V3
import { Router, Route, hashHistory } from "react-router";


  
  
// V4 Router組件里只能渲染一個組件
import {
    HashRouter as Router,
    Route
} from "react-router-dom";


  
2. 組件嵌套
// V2 or V3 路由組件嵌套
import { Router, Route, hashHistory } from "react-router";


  
    
    
  
// V4 Router 的路由組件嵌套
import {
    HashRouter as Router,
    Route,
    Switch
} from "react-router-dom";


  (
    
      
        
        
      
    
  )}/>
3. 路由的生命周期

react-router V4中去掉了on****的路由生命周期的鉤子,但是你可以在組件中用componentDidMountcomponentWillMount 代替 onEnter,可以用componentWillUpdatecomponentWillReceiveProps代替 onUpdate,你可以用componentWillUnmount 代替 onLeave

4. Link
// V2 or V3
import { Link } from "react-router";

// V4
import { Link } from "react-router-dom";
5. history.push and history.replace
// V2 or V3
history.push({
    pathname: "/home",
    query: {
        foo: "test",
bar: "temp"
    }
});
history.replace({
    pathname: "/home",
    query: {
        foo: "test",
bar: "temp"
    }
});

// V4
history.push({
    pathname: "/home",
    search: "?foo=test&bar=temp",
});
history.replace({
    pathname: "/home",
    search: "?foo=test&bar=temp",
});
6. props.params
// V2 or V3 獲取params可以這么獲取
this.props.params

// V4
this.props.match.params
7. location.query
// V2 or V3 獲取query可以這么獲取
this.props.location.query

// V4 去掉了location.query,只能使用search來獲取,為了讓其跟瀏覽器一樣
// 如果想要兼容以前的location.query,可以使用query-string庫解析一下
// 如: queryString.parse(props.location.search)
this.props.location.search
8. location.action
// V2 or V3 獲取location的action
this.props.location.action

// V4 去掉了location.action, 放在了history里面
history.action
9.關于history

以前獲取react-router里面的history庫,可以這么獲取:

import {hashHistory as history} from "react-router";

react-router V4:

import createHashHistory as history from "history/createHashHistory";
兼容處理

因為要從react-router V2完全遷移到react-router V4工作量還是挺大的,一下子難以完全遷移,所以對某些地方做了兼容處理。

history
import _ from "lodash";
import queryString from "query-string";

function processHistory(history) {
    const _push = history.push;
    const _replace = history.replace;

    history.push = function (one) {
        if (!_.isPlainObject(one)) {
            return _push.apply(this, arguments);
        }
        const o = Object.assign({}, one);
        if (o.query) {
            o.search = queryString.stringify(o.query);
        }
        _push.apply(this, [o]);
    };

    history.replace = function (one) {
        if (!_.isPlainObject(one)) {
            return _replace.apply(this, arguments);
        }
        const o = Object.assign({}, one);
        if (o.query) {
            o.search = queryString.stringify(o.query);
        }
        _replace.apply(this, [o]);
    };

    return history;
}

export default processHistory;
props
import queryString from "query-string";

const processReactRouterProps = (props) => {
    const newProps = Object.assign({}, props);
    newProps.location.query = queryString.parse(props.location.search);
    newProps.location.action = newProps.history.action;
    newProps.params = props.match.params || {}; // 不止 || 是否有意義
    return newProps;
}
export default processReactRouterProps; 

參考資料:

react-router2 遷移到 react-router4 關注點
react-router 官方文檔

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83584.html

相關文章

  • reactRouter V4 的使用

    摘要:這是關于自己對版本學習理解做的這里獻上官方文檔參考死循環之自己引用自己組件解釋創建創建路由顯示什么組件顯示在什么位置它有三個用來定義渲染內容將迭代所有子元素僅渲染與當前位置匹配的第一個子元素當沒有路徑與當前位置匹配的時候就選擇沒有設置的組 這是關于自己對 REACT-router v4+ 版本學習理解做的dome ## 這里獻上git ## 官方文檔 ## 參考 ## react 死循...

    clasnake 評論0 收藏0
  • 【進階4-2期】Object.assign 原理及其實現

    摘要:木易楊注意原始類型被包裝為對象木易楊原始類型會被包裝,和會被忽略。木易楊原因在于時,其屬性描述符為不可寫,即。木易楊解決方法也很簡單,使用我們在進階期中介紹的就可以了,使用如下。 引言 上篇文章介紹了賦值、淺拷貝和深拷貝,其中介紹了很多賦值和淺拷貝的相關知識以及兩者區別,限于篇幅只介紹了一種常用深拷貝方案。 本篇文章會先介紹淺拷貝 Object.assign 的實現原理,然后帶你手動實...

    layman 評論0 收藏0
  • 項目實踐:從react-router v3遷移到v4

    摘要:詳見對綁定監聽事件,把的改變同步到的中用來把的更新同步到中。代碼分割版本通過和實現代碼分割和動態路由。筆者認為,更符合的組件思想,于是做了一個實踐。 原文:https://github.com/YutHelloWo... 前言 今年3月初發布了react-router v4,相較之前的v3和v2版本做了一個破壞性的升級。遵循一切皆React Component的理念。靜態路由變成了動態...

    zhangrxiang 評論0 收藏0
  • iWebFusion美國獨立服務器$219/月,1Gbps帶寬(可升級),2*e5-2699v4(4

    摘要:官網美國獨立服務器配置信息默認接入帶寬,自帶個和,流量帶寬硬盤都可以定制。月,月,月,,月,月,月,月,月,額月,月,月,月,月。iWebFusion怎么樣,iWebFusion好不好,iWebFusion可謂歷史悠久,2001年成立,美國超級老牌服務器商家!iWebFusion今年對自家獨立服務器進行了改版升級,所有服務器接入1Gbps帶寬,可以升級到10Gbps,給的配置超級高,但是價格...

    Joonas 評論0 收藏0
  • spinservers:圣何塞10Gbps帶寬服務器$109/月起,達拉斯10Gbps服務器$89/

    摘要:目前,商家針對部分服務器提供優惠碼,優惠后達拉斯機房服務器最低每月美元起,圣何塞機房服務器最低每月美元起,均為端口帶寬。? spinservers是Majestic Hosting Solutions LLC旗下站點,主要提供國外服務器租用和Hybrid Dedicated等產品的商家,數據中心包括美國達拉斯和圣何塞機房,機器一般10Gbps端口帶寬,高配置硬件,支持使用PayPal、...

    FrozenMap 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<