我正在使用react路由,并编写如下代码.

我认为所有代码都写得很好.

当我转到"/manage"时,Manage.js文件已正确打开.

然而,我一直面临警告信息:

react 路由:路由.ts:11个没有匹配路由的位置"/管理"

问题是什么?

<ApolloProvider client={client}>
  <BrowserRouter>
    {isLoggedIn ? (
      <Routes>
        <Route path="/statistics" element={<Statistics />} />
        <Route path="/manage" element={<Manage />} />
        <Route path="/info" element={<Info />} />
        <Route path="/rank" element={<Rank />} />
        <Route path="/notice" element={<Notice />} />
      </Routes>
    ) : (
      <Routes>
        <Route exact path="/" element={<Home />} />
      </Routes>
    )}
  </BrowserRouter>
</ApolloProvider>

推荐答案

我确信您看到了这个警告/错误,因为在某些时候,路径"/manage"上有101条路径渲染.

一种解决方法是实现路由保护并无条件渲染路由.

例子:

创建受保护的布局路由,以有条件地为未经身份验证的用户呈现重定向到"/"路径,否则为受保护的组件呈现Outlet路径.

import { Navigate, Outlet } from 'react-router-dom';

const ProtectedRoute = ({ isLoggedIn }) => {
  return isLoggedIn
    ? <Outlet />
    : <Navigate to="/" replace />;
};

export default ProtectedRoute;

创建一个匿名布局路由,该路由与受保护的布局路由组件相反,并重定向到其中一个受保护的路由.

import { Navigate, Outlet } from 'react-router-dom';

const AnonymousRoute = ({ isLoggedIn }) => {
  return isLoggedIn
    ? <Navigate to="//statistics" replace />
    : <Outlet />;
};

export default AnonymousRoute;

...

import AnonymousRoute from '../path/to/AnonymousRoute';
import ProtectedRoute from '../path/to/ProtectedRoute';

...

<ApolloProvider client={client}>
  <BrowserRouter>
    <Routes>
      <Route element={<ProtectedRoute isLoggedIn={isLoggedIn} />}>
        <Route path="/statistics" element={<Statistics />} />
        <Route path="/manage" element={<Manage />} />
        <Route path="/info" element={<Info />} />
        <Route path="/rank" element={<Rank />} />
        <Route path="/notice" element={<Notice />} />
      </Route>
      <Route element={<AnonymousRoute isLoggedIn={isLoggedIn} />}>
        <Route path="/" element={<Home />} />
      </Route>
    </Routes>
  </BrowserRouter>
</ApolloProvider>

因此,所有路由都会在任何时候进行渲染,并且可能是可匹配的.

Reactjs相关问答推荐

Redux向后端发送请求时出现钩子问题

如何在关闭和打开此 Select 输入时应用旋转效果?

使用useReducer时,props 未从父级传递给子或孙级

利用OVERPASS API端点计算某建筑的表面积

无法从正在使用Reaction的Electron 商务store 项目中的购物车中删除项目

如何用Reaction做交互式的MathML?

StyleX中的多语言支持

GoLang有条件地为.js.gz提供服务(如果它存在),否则为.js

在每页上应用字体-NextJS

为什么在页面重新加载时Location.State变得未定义?

如何更新redux状态存在的输入框

使用reactrouterdom时显示"对象无效作为React子组件"错误

如何在 React 过滤器中包含价格过滤器逻辑?

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

React Native应用如何订阅Supabase的实时数据?

为什么 setState 在 React 中不是异步的?

如何解决在 react.js 中找不到模块错误

在 Remix 中使用 chartjs 和 react-chartjs-2 会出现错误react-chartjs-2未在您的 node_modules 中找到

将鼠标悬停在仅适用于该类的第一个实例的 p5.js 类上

警告:您在没有 `onChange` 处理程序的情况下为表单字段提供了 `value` 属性