React 路由器未在 Chrome 中的重定向上安装组件

Posted

技术标签:

【中文标题】React 路由器未在 Chrome 中的重定向上安装组件【英文标题】:React router not mounting component on redirect in Chrome 【发布时间】:2018-05-25 02:44:14 【问题描述】:

我正在使用 react router v4.2,看起来 Switch 内部的重定向不会触发组件安装。我没有使用任何状态管理库,所以它只是纯粹的反应代码,而且这个错误看起来只发生在 chrome 中! 这是我的带有路由的应用组件:

const App = () => (
    <section id="content">
        <div className="container">
            <Switch>
                <Redirect exact from='/' to='/entries/voto'/>
                <Route path="/entries/:order" component=EntryList/>
            </Switch>
       </div>
    </section>
)
export default App;

如果我使用 '/' 输入网站 url,则提供的 url (/entries/voto) 会显示在浏览器中,但没有调用生命周期方法,甚至没有调用构造函数,所以我相信没有任何东西依赖于 EntryList 组件,它没有实现shouldComponentUpdate 方法。

【问题讨论】:

【参考方案1】:

我不确定,但你能不能把你的代码改成这样

const App = () => (
<section id="content">
    <div className="container">
        <Switch>
            <Redirect exact from='/' to='/entries/voto'/>
            <Route path="/entries/:order" render= props => <EntryList ...props/>/>
        </Switch>
   </div>
</section>
 )
 export default App;

我更改 component 并将其替换为 render 。在某些情况下它很有帮助

【讨论】:

@vittoriomaiullari 你能创建一个小提琴或jsbin吗 我明天可以做,但它只发生在 Chrome 中,并且应用程序在 Chrome 匿名模式下工作,所以我想这取决于 Chrome 的行为。【参考方案2】:

我遇到了类似的问题。就我而言,我必须将Redirect 元素放在Route 元素之后。

这样的东西在我的应用程序中有效。

return (<div>
          <Route exact path="/login" component=LoginContainer/>
            this.props.location.pathname !== '/login'&&
                <Redirect exact from="/" to="/login" />
            
        </div>);

【讨论】:

【参考方案3】:

谢谢大家,但看起来这是 chrome 缓存问题!我在隐身模式和全新的 chrome 安装上尝试了该应用程序,它运行良好。

【讨论】:

以上是关于React 路由器未在 Chrome 中的重定向上安装组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React Router 的重定向功能?

angular---路由之重定向路由

iPhone Safari/Chrome 上的重定向过多

React redirect - react-router-dom 上的重定向组件

受保护路由中的重定向问题 - Vue js Router

删除特定路由组的重定向