在 React 中獲取當前 URL
在 React 中開發單頁應用程式時,路由是難題的關鍵部分。在每個 URL 上,可能有需要顯示的元件或其他視覺效果。
在構建 React 應用程式時,開發人員通常需要根據當前 URL 執行各種操作。開發者可以使用多個不同的介面來訪問當前的 URL。
在 React 中獲取當前 URL - Vanilla JavaScript 解決方案
由於 React 基於常規 JavaScript,你可以訪問 window 介面上的 location 屬性。要獲取當前 URL 的完整路徑,你可以使用 window.location.href,而要獲取沒有根域的路徑,請訪問 window.location.pathname。
讓我們看一下這個例子:
class App extends Component {
render() {
console.log(window.location.href);
return <h1>Hi! Try edit me</h1>;
}
}
如果你在 playcode.io 上呈現 App 元件,控制檯將顯示你專案的完整 URL。在這種情況下,這將是 https://playcode.io/837468/。如果你改為 console.log(window.location.pathname),控制檯輸出將是 /837468/。按照這個 link 自己試一下程式碼。
讀取 window.location 是獲取當前 URL 的一個很好的簡單解決方案。但是,它依賴於一般的 window.location 介面。
如果你正在尋找特定於 React 的解決方案,請繼續閱讀。
通過 React Router 獲取當前 URL
React 提供 history-package,並通過 props 分隔 location 物件。它本質上與 window 介面上可用的 location 物件相同,但它是為 React 定製的。
此物件表示應用程式的當前 URL。訪問它的最簡單方法是讀取 props 的 location 物件。
但是,要通過 props 提供 location,你必須安裝 React Router,並且子元件必須連線到 Route 元件。例如:
<Route path="/" component={App}></Route>
在這個例子中,App 元件將可以通過 props 訪問 location 物件。在這個元件中,我們可以讀取 this.props.location.pathname,它將返回一個不包含根域的路徑 URL。
使用 <Route> 元件呈現的子元件也可以訪問 location 屬性。下面是一個例子:
<Route path="/" render={() => <App></App>} />
在這種情況下,App 元件仍將保留對 location props 的訪問許可權。
如果 this.props.location 返回 undefined,則你的 React 元件很可能在自定義 <Route> 元件之外呈現。在這種情況下,你可以匯入高階元件 (HOC)withRouter 並使用它來訪問 location 和 history props。
withRouter 可以從 react-router-dom 包中匯入。下面是一個例子:
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
class App extends Component {
render(){...}
}
export default withRouter(App)
將預設匯出 App 元件包裝在 withRouter HOC 中將允許你訪問 props,否則這些元件僅可用於使用特殊 <Route> 元件呈現的元件。
獲取當前 URL React Router Hooks
功能元件允許你使用鉤子。在我們的情況下,useLocation() 是一個很好的鉤子,它提供了一種訪問 location 物件的簡單方法。
它可以從 react-router-dom 包中匯入。此示例使用 useLocation() 掛鉤獲取 location 物件並將其儲存在變數中。
我們來看一下:
import { useLocation } from "react-router-dom"
const sampleLocation = useLocation();
將 location 物件儲存在變數中後,你可以通過訪問 sampleLocation.pathname 來訪問路徑(沒有根域的 URL)。
你還可以訪問 history 物件的 location 屬性。
useHistory 掛鉤允許你訪問它。然而,由於可變性問題,官方 react-router 文件 建議堅持使用 location 物件。
Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.
LinkedIn