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

Ionic React添加登录认证后根路径空白 如何自动重定向到/login页面

问题原因

你当前根路径/直接挂载了SignOutTabs组件,访问根路径时没有匹配到SignOutTabs内部的子路由规则,所以页面显示空白。你只需要补充根路径的重定向规则,就能实现启动自动跳转到/login。

具体修改步骤

1. 修改App.tsx的路由逻辑

首先完善路由导入,增加Switch和重定向规则:

// 先补充导入Switch组件
import { Redirect, Route, Switch } from 'react-router-dom';

const IonicApp: React.FC = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const user = useContext(UserContext);

  user.setIsLoggedIn = setIsLoggedIn;

  return(
    <IonApp>
      <IonReactRouter>
        <Switch>
          {/* 已登录路由 */}
          {isLoggedIn && <Route path="/" component={SignInTabs} />}
          {/* 未登录路由,包含/login路径 */}
          {!isLoggedIn && <Route path="/" component={SignOutTabs} />}
          {/* 根路径精确匹配重定向规则 */}
          <Route exact path="/">
            <Redirect to={isLoggedIn ? "/home" : "/login"} />
          </Route>
        </Switch>
      </IonReactRouter>
    </IonApp>
  )
}

2. 确认SignOutTabs的路由配置

确保你的SignOutTabs组件内已经配置了/login路径和LoginComponent的对应关系,示例如下:

// ./components/Tabs/SignedOut.tsx 示例
import { Switch, Route } from 'react-router-dom';
import { LoginComponent } from '../你的路径/LoginComponent';

export const SignOutTabs: React.FC = () => {
  return (
    <Switch>
      <Route exact path="/login" component={LoginComponent} />
      {/* 其他未登录页面路由可在此补充 */}
    </Switch>
  )
}

可选优化:调整Context写法

你当前的Context直接修改全局对象的写法不符合React规范,容易引发状态更新异常,可以调整为如下写法:

// App.tsx调整后的完整Context相关代码
interface IUserManager {
  isLoggedIn: boolean;
  setIsLoggedIn: (val: boolean) => void;
}

export const UserContext = React.createContext<IUserManager>({
  isLoggedIn: false,
  setIsLoggedIn: () => {}
});

const App: React.FC = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  return (
    <UserContext.Provider value={{isLoggedIn, setIsLoggedIn}}>
      <IonApp>
        <IonReactRouter>
          <Switch>
            {isLoggedIn && <Route path="/" component={SignInTabs} />}
            {!isLoggedIn && <Route path="/" component={SignOutTabs} />}
            <Route exact path="/">
              <Redirect to={isLoggedIn ? "/home" : "/login"} />
            </Route>
          </Switch>
        </IonReactRouter>
      </IonApp>
    </UserContext.Provider>
  )
}

export default App;

修改完成后重启ionic serve,访问根路径就会自动跳转到/login登录页了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:04