我正在try 使用react-router-dom
中的Reaction加载器来实现受保护的路由.
我的Route
标记中有一个loader
属性,它调用一个伪requireAuth()
函数来判断路由是否经过身份验证.此函数存在于Util类中.如果认证为假,则它重定向到/login
路径.
以下是代码:
import { redirect } from "react-router-dom"
export async function requireAuth() {
const isLoggedIn = false
if (!isLoggedIn) {
throw redirect("/login")
}
}
以下是我如何配置我的路由:
import React from 'react';
import ReactDOM from 'react-dom/client';
import {
RouterProvider,
createHashRouter,
createRoutesFromElements,
Route,
} from "react-router-dom";
import Dashboard from './pages/hosts/Dashboard';
import Login from './pages/Login';
import { requireAuth } from './utils';
const hashRouter = createHashRouter(createRoutesFromElements(
<Route path='/' element={<Layout />}>
<Route index element={<Home />} />
<Route path='login' element={<Login />} />
<Route path='about' element={<About />} />
<Route path='vans'
element={<Vans />}
loader={vansLoader}
errorElement={<Error/>}
/>
<Route
path='vans/:id'
element={<VanDetail />}
loader={vanDetailLoader}
/>
<Route
path='host' element={<HostLayout />} >
<Route
index
element={<Dashboard />}
loader={async () => await requireAuth()}
/>
<Route
path='income'
element={<Income />}
loader={
async ()=>{
return null
}}/>
<Route
path='reviews'
element={<Reviews />}
loader={
async ()=>{
return null
}}/>
<Route
path='vans'
element={<HostVans />}
loader={hostVansLoader}/>
<Route
path='vans/:id'
element={<HostVansDetail/>}
loader={ hostVanDetailLoader}
>
<Route
index
element={<HostVanInfo />}
loader={
async ()=>{
return null
}}/>
<Route
path='pricing'
element={<HostVanPricing />}
loader={
async ()=>{
return null
}} />
<Route
path='photos'
element={<HostVanPhotos />}
loader={
async ()=>{
return null
}}/>
</Route>
</Route>
<Route path='*' element={<PageNotFound />} />
</Route>
));
function App() {
return (
<RouterProvider router={hashRouter} />
)
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />
);
When I load /host path, it should redirect me to the /login route. But I get the error
我的react 是新的,我正在学习.请指点一下.