You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router 4 编程式重定向:登录时跳转至指定/来源页面

React Login组件重定向实现方案

我来帮你搞定这个Login组件的重定向问题~先从你当前需要的重定向到/dashboard开始,再给你铺垫下以后要做来源页面重定向的思路:

一、当前需求:登录后重定向到/dashboard

这里有两种常用的实现方式,都是基于react-router-dom(你的代码里用了Router组件,应该是用的这个包):

方式1:使用Redirect组件

在Login组件里,当登录验证成功后,通过渲染Redirect组件来完成跳转,代码示例如下:

import { Redirect } from 'react-router-dom';

class Login extends React.Component {
  state = {
    isLoggedIn: false,
    // 这里可以添加用户名、密码等登录相关状态
  };

  handleLogin = () => {
    // 先编写你的登录逻辑,比如调用后端API验证账号密码
    // 验证成功后更新登录状态
    this.setState({ isLoggedIn: true });
  };

  render() {
    // 如果已经登录成功,直接重定向到/dashboard
    if (this.state.isLoggedIn) {
      return <Redirect to="/dashboard" />;
    }

    // 未登录状态下渲染登录表单
    return (
      <div>
        <h2>登录</h2>
        {/* 这里放置你的用户名、密码输入框等表单元素 */}
        <button onClick={this.handleLogin}>登录</button>
      </div>
    );
  }
}

export default Login;

方式2:编程式导航(history.push())

如果你更喜欢用代码逻辑控制跳转,可以用withRouter高阶组件把路由的history对象注入到Login组件的props里,然后调用push方法完成跳转:

import { withRouter } from 'react-router-dom';

class Login extends React.Component {
  handleLogin = () => {
    // 完成登录验证后,直接调用history.push跳转到目标页面
    this.props.history.push('/dashboard');
  };

  render() {
    return (
      <div>
        <h2>登录</h2>
        {/* 登录表单区域 */}
        <button onClick={this.handleLogin}>登录</button>
      </div>
    );
  }
}

// 必须用withRouter包裹组件,才能获取到history等路由相关props
export default withRouter(Login);

二、为后续“重定向到来源页面”做准备

等你以后要实现用户访问Login前的来源页面跳转,可以提前做这些准备:

  • 首先,在需要登录才能访问的页面路由里,把当前页面的路径作为state传递给Login页面,比如:
// 举个例子,比如Dashboard页面需要登录才能访问
<Route 
  path="/dashboard" 
  render={(props) => 
    isAuthenticated ? ( // isAuthenticated是你判断用户是否登录的变量
      <Dashboard />
    ) : (
      <Redirect to={{
        pathname: "/login",
        state: { from: props.location.pathname } // 把当前来源路径传递给Login页面
      }} />
    )
  } 
/>
  • 然后在Login组件登录成功后,读取传递过来的来源路径,没有的话就默认 fallback到/dashboard:
// 编程式导航的写法
const { from } = this.props.location.state || { from: { pathname: '/dashboard' } };
this.props.history.push(from);

// Redirect组件的写法
<Redirect to={from || '/dashboard'} />

内容的提问来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:56:24