2016-07-20 83 views
5

希望這是一個很簡單的問題:陣營 - 終極版獲得站點的基礎URL/window.location的

我想創建一個包含完整的URL的網頁上我的網站,像一個字符串:

https://example.com/documents/1

理想情況下,我想在一個容器mapStateToProps()中生成這個反應。如果頁面是反應路由器的子孫Route使用browserHistory(所以也許我可以從反應路由器或browserHistory得到它)?如果有必要,我會做一個完整的React類。

但我不能爲我的生活找出如何做到這一點。 window(如window.location)總是undefinedmapStateToProps()(沒有大的驚喜),並在我看來組件'render()函數。

到目前爲止,我只找到了訪問當前路線的方法,例如, 「/ documents/1」,它只是一個相對路徑,不包含站點基址(https://example.com/

+0

你需要在服務器上創建這個強大的,還是隻在客戶端? –

+0

就在客戶端。 – stone

回答

9

所以首先記住你的代碼在客戶端和服務器上運行,這樣任何對窗口的訪問都需要被包裝在檢查。

if (typeof window !== 'undefined') { 
    var path = location.protocol + '//' + location.host + '/someting'; // (or whatever) 
    } else { 
    // work out what you want to do server-side... 
    } 

如果在DOM生成表演和客戶機上之前填充這個URL商店的網址第一渲染,你會得到一個校驗和錯誤。如果你真的想要避免錯誤你可以等到componentDidMount()在你的根組件中獲取/設置url。

+0

謝謝,閱讀componentDidMount中的'window.location'工作。我從應用程序的頂級組件執行此操作並將其保存在狀態中。我可以問一個)爲什麼你建議在服務器端做 - 這樣做,以便服務器端渲染也可以工作?和b)你會建議如何/從哪裏存儲服務器端的URL,以便客戶端代碼可以讀取它? – stone

+0

@skypecakes現在我已經考慮過了,是的,沒有很好的理由讓它在服務器上,所以我從我的答案中刪除了該評論。 –