React HashRouter 在使用重定向组件的路径名时有两个哈希符号“#”
React HashRouter is having two hash symbols '#' when using Redirect component's pathname
我正在为我的应用程序使用 "react-router-dom": "^5.2.0"
。我已经使用它的 HashRouter
来处理我的路由。我的根路由应与现有查询字符串一起重定向到特定路由。我遇到的问题是,一旦我使用 Redirect
组件的 pathName
,它就会在我的 URL.
中添加两个“#”符号
当前行为: mydomain.org/myApp#/?someParam=someValue
=> mydomain.org/myApp#/CompA#/?someParam=someValue
预期行为: mydomain.org/myApp#/?someParam=someValue
=> mydomain.org/myApp#/CompA/?someParam=someValue
这是我所做的
import React from 'react';
import { Redirect, HashRouter, Route, Switch } from 'react-router-dom';
const App: React.FC<any> = (props: any) => {
return (
<HashRouter>
<Switch>
<Route exact key="/" path="/">
<RedirectComp to="/CompA" />
</Route>
<Route exact key="/CompA" path="/CompA">
<CompA />
</Route>
</Switch>
</HashRouter>
);
};
const RedirectComp: React.FC<any> = (props: any) => {
return (
<Redirect to={{ ...location, pathname: props.to }} />
);
}
我使用自定义组件进行重定向的原因是为了在重定向时保留 queryString。这就是为什么我不能使用 <Redirect to="/CompA" />
.
是否有更简洁的方法来实现此目的而无需在 Location.hash
中进行字符串搜索并更新它?
您似乎在使用全局 location
object instead of the location that Redirect expects. Inside RedirectComp
, use the useLocation()
挂钩来获取位置。两个 Location
对象都有一个哈希字段,但它们不匹配,因为您使用的是 HashRouter
.
此外,如果您只想保留查询字符串,则只需将 Location
对象中的 search
字段包含在 [=19= 中 pathname
].
const RedirectComp: React.FC<any> = (props: any) => {
const location = useLocation();
return (
<Redirect to={{ search: location.search, pathname: props.to }} />
);
}
我正在为我的应用程序使用 "react-router-dom": "^5.2.0"
。我已经使用它的 HashRouter
来处理我的路由。我的根路由应与现有查询字符串一起重定向到特定路由。我遇到的问题是,一旦我使用 Redirect
组件的 pathName
,它就会在我的 URL.
当前行为: mydomain.org/myApp#/?someParam=someValue
=> mydomain.org/myApp#/CompA#/?someParam=someValue
预期行为: mydomain.org/myApp#/?someParam=someValue
=> mydomain.org/myApp#/CompA/?someParam=someValue
这是我所做的
import React from 'react';
import { Redirect, HashRouter, Route, Switch } from 'react-router-dom';
const App: React.FC<any> = (props: any) => {
return (
<HashRouter>
<Switch>
<Route exact key="/" path="/">
<RedirectComp to="/CompA" />
</Route>
<Route exact key="/CompA" path="/CompA">
<CompA />
</Route>
</Switch>
</HashRouter>
);
};
const RedirectComp: React.FC<any> = (props: any) => {
return (
<Redirect to={{ ...location, pathname: props.to }} />
);
}
我使用自定义组件进行重定向的原因是为了在重定向时保留 queryString。这就是为什么我不能使用 <Redirect to="/CompA" />
.
是否有更简洁的方法来实现此目的而无需在 Location.hash
中进行字符串搜索并更新它?
您似乎在使用全局 location
object instead of the location that Redirect expects. Inside RedirectComp
, use the useLocation()
挂钩来获取位置。两个 Location
对象都有一个哈希字段,但它们不匹配,因为您使用的是 HashRouter
.
此外,如果您只想保留查询字符串,则只需将 Location
对象中的 search
字段包含在 [=19= 中 pathname
].
const RedirectComp: React.FC<any> = (props: any) => {
const location = useLocation();
return (
<Redirect to={{ search: location.search, pathname: props.to }} />
);
}