当前位置: 首页 > 面试题库 >

React Router v4重定向不起作用

贾俊喆
2023-03-14
问题内容

检查这样的情况后,我有一条重定向的路线

<Route exact path="/" render={()=>(
Store.isFirstTime ? <Redirect to="intro" /> : <Home state={Store}/>)}/>

条件为真但未安装组件时,URL会更改。其余的组件代码如下。

render() {
    return (
      <div>
        ...
        <Route exact path="/" render={()=>(
          Store.isFirstTime ? <Redirect to="intro" /> : <Home state={Store} />         
        )} />
        <Route path="/intro" render={()=>(<IntroWizard state={Store.userInfo}/>)} />
        <Route path="/home" render={()=>(<Home state={Store}/>)} />
        <Route render={()=>(<h1>404 Not Found</h1>)} />
        <Footer />
      </div>
    );
  }

我的应用程序组件包含在BrowserRouter中,例如thi

ReactDOM.render(<BrowserRouter>
    <App/>
</BrowserRouter>,
  document.getElementById('root')
);

当我在浏览器中直接命中url时,例如’localhost:3000 / intro’组件已成功安装,但是当它通过重定向时,它不会显示该组件。我如何解决它?

因此缺少一个细节,我尝试创建另一个项目来重现该问题。我的App组件是mobx-react的观察者,并且如下所示导出

let App = observer(class App { ... })
export default App

我已经用示例代码创建了这个仓库,以重现您可以使用它的问题
https://github.com/mdanishs/mobxtest/

因此,当组件包装到mobx反应观察器中时,重定向不起作用,否则它将正常工作


问题答案:

询问者在GitHub上发布了一个问题,并获得了这份显然未发布的隐藏指南(编辑:现已发布),该指南也对我有所帮助。我将其发布在这里是因为我遇到了同样的问题,希望其他人避免我们的痛苦。

问题在于,mobx-react和react-
redux都提供了它们自己的shouldComponentUpdate()功能,这些功能仅检查道具更改,但是react-
router通过上下文向下发送状态。位置更改时,它不会更改任何道具,因此不会触发更新。

解决此问题的方法是将位置向下传递为道具。上面的指南列出了执行此操作的几种方法,但最简单的方法是仅将容器包装成具有withRouter()较高顺序的组件:

export default withRouter(observer(MyComponent))

或者,对于redux:

export default withRouter(connect(mapStateToProps)(MyComponent))


 类似资料:
  • 问题内容: include(‘header.php’); 上面的代码不断给我重定向的问题。错误如下: 警告:无法修改标头信息-已在/ Applications / MAMP / htdocs / testygubbins / OO / test / form中发送的标头(输出始于/Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15

  • 问题内容: 不知道为什么这不起作用。这是代码: 而不是重定向页面,此输出到网页。它跳过了重定向。为什么?我怎样才能解决这个问题?page1.php是一个实际页面,与当前页面位于同一文件夹中。上面的代码是php文件的第一行。没什么 没有。甚至没有空格。 问题答案: Pekka在评论中回答了我的问题。他没有发布答案,所以我现在是。标头重定向后使用此方法。由于某种原因,页眉的其余代码在header()方

  • 我对symfony框架知之甚少。我复制了一个网站www.example。net访问www.example。com站点使用url 它不会重定向。 谢谢

  • 问题内容: 我在Angular应用中用于路由。在典型的登录场景中,如果用户未登录,我会将用户重定向到登录URL。如果没有ui.router库,则可以将$ routeChangeStart事件与结合使用,效果很好。现在,我正在使用结合了的事件,但没有任何效果!它还会将我的浏览器发送到一个无限循环中。我从其他来源了解到,这是一个已知的错误,建议的解决方案都不适合我。而且,也不会重定向到登录页面。 这是

  • 问题内容: 我正在尝试将NSLog发送到在Simulator,IOS 10.2上运行的Swift 3中的文件中并且什么都没有产生 输出量 唯一的效果是输出不再打印到控制台。 我努力了 和其他各种组合 我毫不费力地用接收到的路径写一个文件,所以这没有任何问题 我希望在路径中看到一个名为file.txt的文件,并且该文件包含“ print nslog”。我尝试先创建文件,但没有成功。 问题答案: 的属

  • 问题内容: 这是我的档案。我想使其重定向,但是什么也没有发生。为了查看发生了什么,我在标题部分之前添加了回显。 它既不会引发错误,也不会重定向到index.php。怎么了?我已打开/关闭输出缓冲,但是没有任何东西可以使其重定向。我能做什么? 谢谢 问题答案: 我提醒自己,我已经在实际的测试环境中安装了xDebug,在对其进行了搜索之后,我发现了以下站点:http ://bugs.xdebug.or