如何从ReactJS组件中获取完整的URL?
我认为它应该是this.props.location
,但它是undefined
答案 0 :(得分:97)
window.location.href
是您正在寻找的。
答案 1 :(得分:26)
this.props.location
is a react-router feature,如果您想使用它,则必须安装。
注意:不会返回完整的网址。
答案 2 :(得分:12)
如果您需要URL的完整路径,则可以使用原始Javascript:
window.location.href
要获取仅路径(减去域名),可以使用:
window.location.pathname
console.log(window.location.pathname); //yields: "/js" (where snippets run)
console.log(window.location.href); //yields: "https://stacksnippets.net/js"
来源:Location pathname Property - W3Schools
如果您尚未使用“反应路由器”,则可以使用:
yarn add react-router
然后在“路线”中的React.Component中,您可以调用:
this.props.location.pathname
这将返回路径,不包括域名。
感谢@ abdulla-zulqarnain!
答案 3 :(得分:8)
您将获得undefined
,因为您可能拥有React Router之外的组件。
请记住,您需要确保您调用this.props.location
的组件位于<Route />
组件中,例如:
<Route path="/dashboard" component={Dashboard} />
然后在仪表板组件内,您可以访问this.props.location
...
答案 4 :(得分:5)
window.location.href
是您所需要的。但是,如果您正在使用React Router,则可能会发现有用的 useLocation 和 useHistory 钩子。
两者都创建了一个具有您可以读取的pathname属性的对象,并且对其他很多东西很有用。 Here's a youtube video explaining react router hooks
两者都会为您提供所需的信息(不带域名)
import { useHistory ,useLocation } from 'react-router-dom';
const location = useLocation()
location.pathname
const history = useHistory()
history.location.pathname
答案 5 :(得分:4)
只需向此页面添加更多文档-一段时间以来,我一直在努力解决此问题。
如上所述,获取URL的最简单方法是通过window.location.href
。
然后我们可以使用let urlElements = window.location.href.split('/')
然后我们将console.log(urlElements)
看到通过在URL上调用.split()产生的元素数组。
找到要访问的数组中的索引后,就可以将其分配给变量
let urlElelement = (urlElements[0])
现在您可以在任意位置使用urlElement的值,该值将是URL的特定部分。
答案 6 :(得分:2)
阅读本文,我找到了 React / NextJs
的解决方案。因为如果我们在 react 或 nextjs 中直接使用 window.location.href
会抛出像
服务器错误 参考错误:窗口未定义
import React, { useState, useEffect } from "react";
const Product = ({ product }) => {
const [pageURL, setPageURL] = useState(0);
useEffect(() => {
setPageURL(window.location.href);
})
return (
<div>
<h3>{pageURL}</h3>
</div>
);
};
答案 7 :(得分:0)
正如其他人所述,首先您需要react-router
软件包。但是它提供给您的location
对象包含已解析的url。
但是,如果您很想在不访问全局变量的情况下非常想要完整的url,我相信最快的方法是
...
const getA = memoize(() => document.createElement('a'));
const getCleanA = () => Object.assign(getA(), { href: '' });
const MyComponent = ({ location }) => {
const { href } = Object.assign(getCleanA(), location);
...
href
是包含完整网址的
对于memoize
,我通常使用lodash
,它的实现方式主要是避免不必要地创建新元素。
P.S .:当然,您不受制于古老的浏览器,您可能想尝试new URL()
,但基本上整个情况几乎没有意义,因为您以一种或另一种方式访问全局变量。那为什么不使用window.location.href
呢?
答案 8 :(得分:0)
要获取当前路由器实例或当前位置,您必须使用withRouter
中的react-router-dom
创建一个高级组件。否则,当您尝试访问this.props.location
时,它将返回undefined
示例
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
class className extends Component {
render(){
return(
....
)
}
}
export default withRouter(className)
答案 9 :(得分:-2)
您可以使用“ document.referrer”访问完整的uri / url
选中https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer