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

React Router Dom中Redirect组件无法跳转到指定路径的问题

React支付按钮未登录重定向问题

问题场景

点击按钮触发支付函数时,用户未登录就需要跳转到登录页。当前代码里history.push能正常工作,但返回Redirect组件却无效:

const PaymentMethod = ()=>{
        
      if(!isAuthenticated()) 
      {
           toast.error('Please signin to continue');
           history.push('/signin') // 正常生效
          // return <Redirect to = '/signin' /> // 不生效
           
      }
      
   }

// isAuthenticated 是判断用户是否登录的布尔函数

为什么Redirect不生效?

Redirect是React Router的组件,必须作为JSX被渲染到DOM中才会触发重定向逻辑。但你的PaymentMethod是一个事件处理函数(不是组件渲染函数),直接返回Redirect组件根本不会被React处理,自然起不到跳转作用。

而history.push是直接操作路由的历史栈,属于命令式的路由跳转,在事件函数里调用完全没问题,所以能正常工作。

解决办法

办法1:保留history.push(推荐)

既然这个方式已经正常工作,没必要强行换Redirect,直接用就行,还能少改代码:

const PaymentMethod = ()=>{
      if(!isAuthenticated()) 
      {
           toast.error('请登录后继续');
           history.push('/signin');
      } else {
          // 这里写已登录后的支付逻辑
      }
   }

办法2:非要用Redirect?改成组件模式

如果坚持要用Redirect,得把逻辑改成组件形式,让Redirect能被渲染出来:

import { Redirect, useState } from 'react';

const PaymentButton = () => {
  const [needLogin, setNeedLogin] = useState(false);

  const handlePay = () => {
    if (!isAuthenticated()) {
      toast.error('请登录后继续');
      setNeedLogin(true);
    } else {
      // 执行支付流程
    }
  };

  // 如果需要登录,渲染Redirect组件触发跳转
  if (needLogin) {
    return <Redirect to="/signin" />;
  }

  return <button onClick={handlePay}>去支付</button>;
};

之后在页面里用<PaymentButton />代替原来的按钮即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:25:24