反应路由器重定向到主页

Posted

技术标签:

【中文标题】反应路由器重定向到主页【英文标题】:React-router redirect to Homepage 【发布时间】:2019-02-01 22:20:05 【问题描述】:

我有多种职业路线、项目路线和申请工作路线。

但我只想谈谈项目 我有很多从后端获取的项目数据

在一个项目中,我有关于这个项目的信息,称为 ProjectDetails(这是呈现单个项目的组件) 因此,ID 为 913 的 f.e http://localhost:4000/#/projects/913 具有有关已获取的 ID 为 913 的项目的信息,依此类推。

我想要实现的是将用户重定向到 http://localhost:4000/(主页),如果他在 url 中键入不存在的内容,例如 http://localhost:4000/#/projects/someID(永远不会从后端获取 someID)

有什么想法或建议可以通过 React-router 的 Redirect 组件实现这一点吗?

我的 ProjectDetails 组件如下所示:

let ProjectDetails = ( projects, match ) => 
  if (!projects.length) return false;
  const project = projects.find(item => item.Id == match.params.id);
  return (
    <Element name='Projects'>
      <SectionActiveTile match=match name=project.Title>
        <div className='project_details_content'>
          <div className="project_images">
            <LazyImg src=`http://mywebsite.co/media/projects/$project.ImageURL` alt=`$project.Title image` />
            <div className="project_icons">
              !!project.WebSiteURL &&
                <a target='_blank' href=project.WebSiteURL>
                  <LazyImg src=webImg  />
                </a>
              
              !!project.iTunesStoreURL &&
                <a target='_blank' href=project.iTunesStoreURL>
                  <LazyImg src=appStoreImg  />
                </a>
              
              !!project.GooglePlayURL &&
                <a target='_blank' href=project.GooglePlayURL>
                  <LazyImg src=googlePlayImg  />
                </a>
              
            </div>
          </div>
          <div className="project_description">
            <h4>Customer:</h4>
            <p>project.Customer</p>
            <h4>Project Facts:</h4>
            <p>project.ProjectFacts</p>
            <h4>Technologies:</h4>
            <p>project.Technologies</p>
          </div>
        </div>
      </SectionActiveTile>
    </Element>
  );
; 

项目信息从父组件传递到 ProjectDetails

更新

这是我的路线:

    <Switch>
      <Route path='/projects/:id' component=ProjectDetails />
      <Route path='/career/:id' component=CareerDetails />
      <Route path='/apply-for-job' render=(props) => (
        <ModalWindow
          ...props
          modalHeader='Apply form'>
          <ApplyForm history=props.history />
        </ModalWindow>
      ) />
      <Route path='/' component=withScrollPreservation(LandingPage, Footer) />     
    </Switch>

【问题讨论】:

请分享您的路线代码? 【参考方案1】:

您只需要使用来自react-routerRedirect 组件。

你可以像这样修改ProjectDetails

let ProjectDetails = ( projects, match ) => 
  let HomeURL = ""; //add your homeURL here
  if (!projects.length) 
      return (<Redirect to = HomeURL />);
  
  const project = projects.find(item => item.Id == match.params.id);
  if(project === undefined) 
      return (<Redirect to = HomeURL />);
  
  return (
      //your code as is
  );

【讨论】:

很好用!但是当用户输入 URL 并点击输入时,它不会重定向。只有当我刷新页面时它才会重定向 没关系,我没有刷新页面。它就像一个魅力!这应该被接受的答案。谢谢你!【参考方案2】:

你可以通过以下方式处理不匹配

     <Switch>
          <Route path='/projects/:id' component=ProjectDetails />
          <Route path='/career/:id' component=CareerDetails />
          <Route path='/apply-for-job' render=(props) => (
            <ModalWindow
              ...props
              modalHeader='Apply form'>
              <ApplyForm history=props.history />
            </ModalWindow>
          ) />
          <Route path='/' component=withScrollPreservation(LandingPage, Footer) />     
         <Route component=HomePage/> 
        </Switch>

详情请咨询documentation

【讨论】:

【参考方案3】:

如果您没有找到项目,您可以推送新路线。 供您参考Programmatically navigate using react router

【讨论】:

以上是关于反应路由器重定向到主页的主要内容,如果未能解决你的问题,请参考以下文章

反应测试库:测试路由器重定向

反应路由器重定向在私有路由中不起作用

使用反应路由器从主页重定向到特定页面后访问从 NavLink 传递的数据

以编程方式重定向到反应路由器 v6 中的路由的问题

以编程方式重定向到反应路由器 v6 中的路由的问题

codeigniter 301 使用路由器重定向旧网址,并且没有重定向