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

React Router v6中通过Link组件传props实现登录/注册切换

解决React Router中通过Link传递登录/注册模式的问题

这里提供两种实用方案,帮你实现点击不同Link直接切换Authentication组件的显示模式:

方案一:URL搜索参数(推荐,刷新页面状态不丢失)

这种方式通过URL的查询参数传递模式信息,优点是页面刷新后状态依然保留,用户体验更稳定。

1. 修改导航栏的Link组件

给每个Link添加search参数,明确指定模式:

<Link to="/auth?mode=signup" className={classes.btn}>
  Get Started
</Link>
<Link to="/auth?mode=login" className={classes.btn}>
  Login
</Link>

2. 在Authentication组件中读取参数

使用React Router提供的useSearchParams钩子获取URL参数,初始化authMode:

import { useSearchParams } from 'react-router-dom';
import { useState } from 'react';

function Authentication() {
  // 获取URL搜索参数
  const [searchParams] = useSearchParams();
  // 从参数中取模式,默认显示login
  const initialMode = searchParams.get('mode') || 'login';
  const [authMode, setAuthMode] = useState(initialMode);

  return (
    <section className={classes.container}>
      <div>
        <img src={auth} alt="认证页面插图" />
      </div>
      <div>
        {authMode === "login" ? (
          <Login setAuthMode={setAuthMode} />
        ) : (
          <Signup setAuthMode={setAuthMode} />
        )}
      </div>
    </section>
  );
}

方案二:Link的state属性(适合临时状态,刷新会丢失)

如果不需要页面刷新后保留模式,可以用Link的state属性传递数据,这种方式不会暴露在URL中。

1. 修改导航栏的Link组件

通过state属性传递模式:

<Link to="/auth" state={{ mode: 'signup' }} className={classes.btn}>
  Get Started
</Link>
<Link to="/auth" state={{ mode: 'login' }} className={classes.btn}>
  Login
</Link>

2. 在Authentication组件中读取state

使用useLocation钩子获取路由状态:

import { useLocation } from 'react-router-dom';
import { useState } from 'react';

function Authentication() {
  const location = useLocation();
  // 从state中取模式,默认显示login
  const initialMode = location.state?.mode || 'login';
  const [authMode, setAuthMode] = useState(initialMode);

  return (
    <section className={classes.container}>
      <div>
        <img src={auth} alt="认证页面插图" />
      </div>
      <div>
        {authMode === "login" ? (
          <Login setAuthMode={setAuthMode} />
        ) : (
          <Signup setAuthMode={setAuthMode} />
        )}
      </div>
    </section>
  );
}

额外说明

你原来的Authentication组件中声明的setMode props没有被使用,可以直接移除,避免代码冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:26