我正在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 enter image description here

enter image description here

我的react 是新的,我正在学习.请指点一下.

推荐答案

export async function requireAuth() {
    const isLoggedIn = false
    if (!isLoggedIn) {
       const response = redirect("/login")
       response.body = true;
       throw response;
    }
    return null;
}

我把我的工具功能改成了这个,它起作用了.

Javascript相关问答推荐

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

如何粗体匹配的字母时输入搜索框使用javascript?

colored颜色 检测JS,平均图像 colored颜色 检测JS

我的服务工作器没有连接到我的Chrome扩展中的内容脚本.我该怎么解决这个问题?

如何在JavaScript文件中使用Json文件

在使用HighChats时如何避免Datatables重新初始化错误?

如果Arrow函数返回函数,而不是为useEffect返回NULL,则会出现错误

使用ThreeJ渲染的形状具有抖动/模糊的边缘

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

基于props 类型的不同props ,根据来自接口的值扩展类型

JavaScript是否有多个`unfined`?

查询参数中的JAVASCRIPT/REACT中的括号

Puppeteer上每页的useProxy返回的不是函数/构造函数

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

是否可以将异步调用与useState(UnctionName)一起使用

将相关数据组合到两个不同的数组中

MongoDB通过数字或字符串过滤列表

如果对象中的字段等于某个值,则从数组列表中删除对象

在范围数组中查找公共(包含)范围

相对于具有选定类的不同SVG组放置自定义工具提示