Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript react路由器redux重定向到绝对url_Javascript_Reactjs_Routing_React Router_React Router Redux - Fatal编程技术网

Javascript react路由器redux重定向到绝对url

Javascript react路由器redux重定向到绝对url,javascript,reactjs,routing,react-router,react-router-redux,Javascript,Reactjs,Routing,React Router,React Router Redux,我正在迁移react应用程序,并尝试将其拆分。基本上,我希望将一些客户端反应路由重定向到绝对URL(或相对URL,但至少要使用服务器往返,在服务器往返中进行反向代理) 注意 反应路由器3.0.0 react路由器redux 4.0.7 该应用程序具有以下URL =>主页 =>第一条路线 =>第二条路线 =>第三条路线 现在一切都在里面 路由如下所示: <Provider store={store}> <Router history={history}>

我正在迁移react应用程序,并尝试将其拆分。基本上,我希望将一些客户端反应路由重定向到绝对URL(或相对URL,但至少要使用服务器往返,在服务器往返中进行反向代理)

注意

  • 反应路由器3.0.0
  • react路由器redux 4.0.7
  • 该应用程序具有以下URL
    • =>主页
    • =>第一条路线
    • =>第二条路线
    • =>第三条路线
现在一切都在里面

路由如下所示:

<Provider store={store}>
  <Router history={history}>
    <Route path="/" component={Root}>
      <IndexRoute component={Home} />
      <Route path="/someroute1" component={Route1} />
      <Route path="/someroute2" component={Route2} />
      <Route path="/someroute3" component={Route3} />
    </Route>
  </Router>
</Provider>

目标是重定向,比如说,将“/”和“/someroute2”路由到静态URL(服务器URL)。因此:

  • =>
  • =>保持反应路由
  • =>
  • =>保持反应路由
问题很简单:是否可以用绝对url以干净的方式替换react路由器路由?


我听说过Redirect和IndexRedirect组件,但我不知道如何正确使用它,而且,由于缺少react/react router,我不知道是否会有任何危险的副作用(例如在历史上)。

我没有尝试过,但从语法上讲,你可以这样做:

<Route 
 path="/someroute2" 
 render={() => <Redirect to="http://anotherhost/anotherroute5" />} 
/>
}
/>

部分基于@brub answer,我找到了一个使用哑组件的解决方案

import React, { Component } from 'react'

export default class MyRedirectRoute extends Component {
  componentDidMount() {
    window.location.href = //my url here
  }
  render() {
    return null
  }
}
我就这样通过

<Route path="/someroute3" component={MyRedirectRoute} />

尽管如此,我仍然没有意识到一些事情:

  • 这是推荐的解决方案吗
  • 是否有任何历史副作用
  • 是否有比
    window.location.href
    更好(更多)的解决方案?我尝试了
    这个.context.history
    但没有成功

在接受我自己的答案之前,我正在等待反馈/更好的解决方案

对此,您可能不需要React Router。React路由器的创建者使用
标记。

使用
路由
呈现
属性,而不是
组件
。这样,您就可以指定要调用的函数,而不是要实例化的组件。在函数中,使用
window.location.href
,以老式方式执行导航:

<Route 
  path="/someroute2" 
  render={() => {
    window.location.href = "http://anotherhost/anotherroute5";
    return null;
  }} 
/>
{
window.location.href=”http://anotherhost/anotherroute5";
返回null;
}} 
/>

谢谢:)但这会导致heh-就像我说的“未经尝试”。我刚刚编辑了它,你可以尝试按上面的方式推送位置。哼:/不起作用。它在控制台中显示一个白色窗口,没有任何错误。它似乎在
componentDidMount
内部完成了操作,请参见我的回答-我未编辑我的错误编辑-我认为您无法从render()调用导航函数。我通常在传奇中做有条件的导航。对于这个特定的用例,如果可能的话,我会在react代码之外处理重定向(nginx或其他东西)。我已经尝试过这样的解决方案
render{()=>this.props.isLoggedIn?:}
使用完全相同的哑组件进行重定向。它将我重定向到签出页面,但在它完成加载之前,我将被重定向到重定向页面。Props isLoggedIn在我登录时更新为true,所以不是这样。有什么想法吗??