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

React Router 受保护路由未自动重定向至/login页面反而报错的问题求助

React Router 受保护路由未自动重定向至/login页面反而报错的问题求助

大伙好,我正在做一个vanlife练手项目,现在要实现React Router的受保护路由功能,结果卡住了:未登录状态下访问/host下的路由时,没有自动跳转到/login页面,反而直接报错了。按道理说,这种情况应该自动重定向到登录页才对,有没有大佬帮我看看哪里出问题了?

下面是我的代码:


main.jsx

import { createRoot } from 'react-dom/client'
import Layout from './components/Layout.jsx';
import Home from './pages/Home.jsx';
import About from './pages/About.jsx';
import Login from './pages/Login.jsx';
import Error from './components/Error.jsx';
import Vans, { loader as vanLoader } from './pages/Vans/Vans.jsx';
import VansDetails, { loader as vanDetailLoader } from './pages/Vans/VansDetails.jsx';
import Dashboard from './pages/Host/Dashboard.jsx';
import Income from './pages/Host/Income.jsx';
import Reviews from './pages/Host/Reviews.jsx';
import HostVans, { loader as hostvanLoader } from './pages/Host/HostVans.jsx';
import HostVansDetail, { loader as hostvandetailLoader } from './pages/Host/HostVansDetail.jsx';
import Pricing from './pages/Host/HostVanDetails/Pricing.jsx';
import Photos from './pages/Host/HostVanDetails/Photos.jsx';
import Info from './pages/Host/HostVanDetails/Info.jsx';
import HostLayout from './components/HostLayout.jsx';
import { RouterProvider, Route, createBrowserRouter, createRoutesFromElements } from 'react-router-dom';
import NotFound from './pages/NotFound.jsx';
import './server.js';
import { requireAuth } from './utils.js';
import { StrictMode } from 'react';

const router = createBrowserRouter(createRoutesFromElements(
  <Route element={<Layout />}>
    <Route index element={<Home />} />
    <Route path='about' element={<About />} />
    <Route path='vans' element={<Vans />} loader={vanLoader} errorElement={<Error />} />
    <Route path='vans/:id' element={<VansDetails />} loader={vanDetailLoader} />
    <Route path='host' element={<HostLayout />} >
      <Route index element={<Dashboard />} loader={async () => await requireAuth()} />
      <Route path='income' element={<Income />} loader={async () => await requireAuth()} />
      <Route path='reviews' element={<Reviews />} loader={async () => await requireAuth()} />
      <Route path='vans' element={<HostVans />} loader={async () => {
        await requireAuth()
        return hostvanLoader()
      }} />
      <Route path='vans/:id' element={<HostVansDetail />} loader={async (obj) => {
        await requireAuth()
        return hostvandetailLoader(obj)
      }} >
        <Route index element={<Info />} loader={async () => await requireAuth()} />
        <Route path='pricing' element={<Pricing />} loader={async () => await requireAuth()} />
        <Route path='photos' element={<Photos />} loader={async () => await requireAuth()} />
      </Route>
    </Route>
    <Route path='login' element={<Login />} />
    <Route path='*' element={<NotFound />} />
  </Route>
));

function App() {
  return (
    <div className='bg-[#FFF7ED] h-screen font-[inter] relative flex flex-col overflow-x-hidden'>
      <RouterProvider router={router} HydrateFallback={<h1>Loading...</h1>} />
    </div>
  )
}

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>
)

utils.js

import { redirect } from "react-router-dom"

export async function requireAuth() {
  const isLoggedIn = false
  if (!isLoggedIn) {
    throw redirect("/login")
  }
}

我已经在每个受保护路由的loader里都调用了requireAuth函数,里面判断未登录就抛出redirect,但就是没触发跳转反而报错了,有没有大佬帮我找找问题所在?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:00:30