React Router v4重定向不起作用
检查这样的情况后,我有一条重定向的路线
<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))
以上是 React Router v4重定向不起作用 的全部内容, 来源链接: utcz.com/qa/413976.html