此问题在此处已有答案:
React-Router External link(25个回答)
2天前关闭。
我有一个ReactJS应用程序需要修改。
当前,特定管线将显示零部件。
<Route
exact
path="/myroute"
render={props => (
<MyComponent
{...props}
action="myroute"
landing={fetchParam(
props.location.search,
'service',
process.env.REACT_APP_DEFAULT_SERVICE_PAGE
)}
/>
)}
/>
字符串
现在,我需要更改此特定路由的逻辑:
我需要检查某些参数以将用户重定向到外部页面。因此,我不再需要显示此特定路由的任何内容。
实现这一目标的最佳做法是什么?有没有可能有一个自定义组件,我可以实现这个逻辑没有任何渲染?
我试着这样做:我创建了一个用于测试的自定义组件:
import React from 'react';
import { Redirect } from 'react-router-dom';
const CustomRedirectComponent = () => {
const shouldRedirect = true;
if (shouldRedirect) {
// Redirect the user to the external page
return <Redirect to="https://www.external-page.com" />;
} else {
// Render any other components
return <div>Content for the specific route</div>;
}
};
export default CustomRedirectComponent;
型
我为它定义了一个新的路由:
<Router>
<Switch>
<Route exact path="/test" component={CustomRedirectComponent} />
</Switch>
</Router>
型
就这样,我在错误控制台中遇到了一个错误/警告:
Warning: Cannot update during an existing state transition (such as within render). Render methods should be a pure function of props and state.
型
在页面上,有一个没有任何重定向的刷新,当前URL被替换为:
https://my-domain/https://www.external-page.com
型
相反,如果我尝试直接使用:
window.location.href=myExternalPageUrl
型
这个很好用。
请注意,我正在使用:
“react-router-dom”:“^4.3.1”,
1条答案
按热度按时间h22fl7wq1#
相反,如果我尝试直接使用:
字符串
这个很好用。
你会想做这样的事情,以避免推到历史堆栈:
型
但是,这是重定向到外部站点的最佳方式。如果你使用一个
<Redirect>
组件,那么react将不得不做一些渲染来完成。一般来说,最好在react之前在服务器上完成这一任务,但我知道在某些情况下这是不可能的,在这种情况下,使用window.location.replace
是您最好的选择,以使其尽可能快地发生。