我正在使用REACT路由V6,我想使用新的加载器在组件加载之前加载数据.因此,我有以下几点看法

在我的index.js中

const router = createBrowserRouter(
createRoutesFromElements(
    <Route path="*"
           loader={async ({ params }) => {

               console.log("index loader log"); //this logs

               return true;
           }}
           element={<App />}
     > </Route>
  )
);
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <RouterProvider router={router} />
);

在我的应用程序组件中,我嵌套了如下路由

const App = () => {
 return (
     <>
        <Routes>
            <Route path="auth/*" element={<AuthLayout/>}/>
            <Route path="about"
             loader={async ({ params }) => {

               console.log("about child loader log"); //this doesnt log

               return true;
              }}
           element={<AboutPage/>}/>
        </Routes>
        <h1>Testing app</h1>
     </>

   );

 }

在APP组件上,当我访问About路由时,Route path="about"上的加载器不会sole.log,但组件被呈现.我错过了什么,装载机才能在 children 路由上工作.

推荐答案

根据一些基本测试,似乎要使新的RRDv6.4数据API工作,您需要在createBrowserRouter函数中指定完整的路由配置.

然而,does似乎已经将此行为的issue@remix-run/react-router作为报告的错误进行了归档,因此,如果它曾经被解决/解决,您可能想要遵循它.(I suspect it was you since the name is "geoffrey" and the timing is coincidentally about an hour ago around the same time as this post)

自那以后,上面的问题已经closed了,并有 comments :

子体<Routes>树不参与数据加载 (https://reactrouter.com/en/main/components/routes)因为他们不能 在渲染时间之前就知道了.你需要把你的后代举起 route个定义进入你传递给createBrowserRouter的路由.

关于后代路由和新的数据API的相关信息可在Routes份文件的说明中找到.

注:

如果您使用的是像createBrowserRouter这样的数据路由,那么 不常使用此组件,因为它不参与数据 正在装载.

将整个路由声明提升到创建数据路由的父路由.以下内容适用于"/about"路由和About组件的加载器功能.

const router = createBrowserRouter(
  createRoutesFromElements(
    <Route
      path="*"
      loader={({ params }) => {
        console.log("index loader log");

        return "This is the App";
      }}
      element={<App />}
    >
      <Route path="auth/*" element={<AuthLayout />} />
      <Route
        path="about"
        loader={({ params }) => {
          console.log("about child loader log");

          return "this is the about page";
        }}
        element={<AboutPage />}
      />
    </Route>
  )
);

App组件应该为嵌套的路由呈现一个Outlet,以将其内容呈现到其中.

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

const App = () => {
  return (
    <>
      <h1>Testing app</h1>
      <Outlet />
    </>
  );
};

Edit react-router-route-loader-not-working-on-nested-components

enter image description here

Reactjs相关问答推荐

有正确的方法来设置我的金牛座应用程序的图标吗?

导致类型错误的调度不是函数";

无法使用Apollo客户端GraphQL设置Next.js 14

为什么Next.js 14无法解析页面路由路径?

ReactJs;Reaction-Hook-Form:仅当 Select 了特定 Select 列表选项时才显示文本输入

TypeError:SearchProduct.get()获得了意外的关键字参数查询'

Google Firestore无法读取图像-react

Mantine DatePickerInput呈现错误

更改点几何体的坐标会将其隐藏

为什么我的react 简单计时器项目不起作用?

React 错误: 只能用作 元素的子元素,从不直接渲染.请将您的 包裹在

如果我使用 formik,如何在嵌套对象中写入正确的值?

面临 React 模式中点击外部条件的问题

运行 npm run build 出现问题

我刚刚部署了我的 Vite React 站点,但我的图标/图像没有部署

在嵌套的 Stack Navigator 中的 BottomTabBar 中导航会导致比以前更多的渲染

React 中的 Slide API Mui 在开始而不是结束时触发侦听器

Cypress - 在继续之前等待下一个按钮重新出现

如果 URL 已随功能组件更改,则取消刷新

Lodash 在命名导入中导入整个包