我的用例是

Router_configuration.js

import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Product, { loader } from "./Product";
import Route1 from "./Route1";

const router = createBrowserRouter([
  {
    path: "/",
    element: <Product />,
    loader: loader,
    children: [
      {
        path: "routeone",
        element: <Route1 />
      }
    ]
  }
]);

const App = () => {
  return <RouterProvider router={router} />;
};

export default App;

Product.js

import Header from "./Header";
import { Outlet } from "react-router-dom";
import Router from "./Router";

const Product = () => {
  return (
    <>
      <Header />
      <Outlet />
      <Router />
    </>
  );
};

export default Product;

export const loader = () => {
  console.log("loader");
  return -1;
};

Header.js

const Header = () => {
  return <p>Header</p>;
};

export default Header;

Route1.js

import { NavLink } from "react-router-dom";

const Router = () => {
  return (
    <>
      <NavLink to={"routeone"}>
        <span> Route 1</span>
      </NavLink>
    </>
  );
};

export default Router;

在加载每条子路由之前,我需要加载特定的数据.因此,我使用父路由的装载机.似乎单击两次NAVLink(令人惊讶的是,仅在双击时而不是在NAVLink上单击)(路由到子路由)会触发我的父加载器.我的目的是无论内部重定向如何,父路由的加载程序都只被调用一次.

但如果我应该Revalidate:这是正确的方式还是我错过了什么?

推荐答案

路径加载器会被再次调用的原因有几种,例如,在初始路径加载后,路径数据为revalidates.我已经突出显示了您在下面遇到的 case .

在几种情况下,数据会被重新验证,从而自动保持您的UI与数据同步:

  • 从a调用操作后.
  • 从获取器调用操作后.表单>
  • 从useSubmit调用操作后
  • 从获取器调用操作后.提交
  • 当通过useRevalidator触发显式重新验证时
  • 当已渲染的路由的URL参数更改时
  • 当URL搜索参数更改时
  • 100

如果您希望根"/"路由仅加载一次,则在第一次加载路由时指定shouldRevalidateprops 并返回false将仅完成调用加载器一次,而不是在应用程序随后导航到相同的当前URL路径时.

Javascript相关问答推荐

JS、C++和C#给出不同的Base 64 Guid编码结果

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

引用在HTMLAttributes<;HTMLDivElement>;中不可用

显示图—如何在图例项上添加删除线效果?

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

使用POST请求时,Req.Body为空

material UI按钮组样式props 不反射

Next.js服务器端组件请求,如何发送我的cookie token?

为什么JPG图像不能在VITE中导入以进行react ?

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

如何确保预订系统跨不同时区的日期时间处理一致?

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

图表4-堆叠线和条形图之间的填充区域

ngOnChanges仅在第二次调用时才触发

是否可以在不更改组件标识的情况下换出Reaction组件定义(以维护状态/引用等)?如果是这样的话,是如何做到的呢?

未找到用于 Select 器的元素:in( puppeteer 师错误)

如何在Highlihte.js代码区旁边添加行号?