路由 + 渲染 + 使用 react-router-dom 重定向

Route + Render + Redirect with react-router-dom

我刚从我的一位同事那里接手了一个 React 项目,但我无法理解下面代码中的逻辑。

      content = <Switch>
        <Route path="/login" exact component={LoginPage} />
        <Route render={() => { return <Redirect to="/login" />; }} />
      </Switch>

我知道如何将 Route 与 ComponentRender 一起使用,但 RenderRedirect 是我第一次看到它。

谢谢

这似乎只是另一种说法:

<Redirect path='*' to='/login' />

因为它在 <Switch> 内,并且在任何 <Route> 之后,它将始终匹配(如果上面没有匹配)并被渲染。

当呈现 Redirect 组件时,它会执行重定向到 to 属性中指定的页面的工作。

我通过阅读源代码发现了这一点。如果您有兴趣,这里有一些间接性,但基本上 Redirect 组件呈现一个 Lifecycle 组件,该组件将在安装后立即调用 method 并提供 location

method 是这样设置的:

const method = push ? history.push : history.replace;

之所以这样做,是因为显然 <Redirect> 组件可以将 push 作为布尔值,以设置实际实现重定向的行为。


重定向组件源 https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Redirect.js

生命周期组件来源:https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Lifecycle.js