使用 react-router-dom 重定向到第三方 URL

IT技术 reactjs react-router-v4 react-router-dom
2021-04-08 21:33:01

我非常了解 react-router-dom 我想对组件进行条件渲染。如果使用未登录,则将他重定向到某个第三方 URL

例如,下面的代码看起来很整洁并且工作正常

<Route exact path="/home" render={() => (
  isLoggedIn() ? (
    <Redirect to="/front"/>
  ) : (
   <Home />
  )
)}/>

让我们在上面的例子中说,如果我想重定向to https://www.google.com我该怎么做?

如果我写

 <Redirect to="https://www.google.com"> it gives me error. 

如何重定向到第三方网站?

5个回答

您可以为外部网址使用标签,

<a href='https://domain.extension/external-without-params'>external</a>

但你也可以提供这样的组件:

<Route path='/external' component={() => { window.location = 'https://domain.extension/external-without-params'; return null;} }/>

您可以使用window.open()重定向到任何网站。

例如:

window.open('https://www.google.com');

在您的代码中实现重定向:

render () {
  if(this.isLogin) {
    return(/* your components*/);
  } else {
    window.open('https://www.google.com');
    return (<div></div>); //render function should return something
  }
}

您还可以指定目标属性或窗口名称,更多详细信息,请参阅w3school 教程关于此功能

如果您使用的是Typescript,您可能会在接受的答案中收到以下错误:

Type 'string' is not assignable to type 'Location'

要解决这个问题,您只需要使用 window.location.href

<Route path="/external" component={() => {window.location.href = config.UPGRADE_URL return null }} />

请记住,您不能使用<Link /><NavLink />因为它们主要用于在单页应用程序中路由。

您应该改用锚标记。例子:<a href="https://www.google.com">Google</a>

可以轻松地使用按钮只需执行以下操作:

<button onClick={(e) => (window.location = 'https://www.google.com')}>Click me</button>
此路线中没有按钮进入图片,因此经过验证的答案是正确的方法。
2021-06-01 21:33:01