我试图理解为什么会有fetcher.load个,以及什么时候使用它.

据doctor 说,fetcher.load打电话给路由的装载机.这也是fetcher.submit({method: 'GET'})所做的.在接下来的实验中,我看不出有什么区别.有没有任何场景下,这两个行为不同?

const loader: LoaderFunction = ({ request }) => {
  const url = new URL(request.url)
  console.log("calling loader");
  const data = {"key":"value", url: url}
  return data
}

export const App = () => {
  const fetcher = useFetcher();
  const fetcher2 = useFetcher();

  const handleClick = () => {
    fetcher.load(`/query-data?input=abc`)
  }

  return (
    <div>
      <button onClick={handleClick} >
        click me 
      </button>
      <pre>{ JSON.stringify(fetcher.data, null, 2) }</pre>
      <hr />
      <fetcher2.Form method="GET" action="/query-data">
        <input name="input" value="abc" type="text" readOnly />
        <button type="submit"> submit </button>
      </fetcher2.Form>
      <pre>{ JSON.stringify(fetcher2.data, null, 2) }</pre>
    </div>
  )
}
const root = createRoot(document.getElementById('app'));

const router = createBrowserRouter([
  {
    path: "/",
    element: <App />,
  },
  { /*resource route*/
    path: "/query-data",
    loader: loader
  }
]);

root.render(
  <RouterProvider router={router} />
);

完整的代码是在stackblitz

推荐答案

fetcher.load等同于GET提交吗?

GET是默认的方法,所以如果你101指定了一个方法,或者在fetcher.submit中显式地指定GET作为方法,那么是的,它们是相同的.

fetcher.submit用于提交当前路由的表单,而fetcher.load103用于触发特定路由的(e.g. 102)加载器,它们都只是GET方法.除此之外,我同意这一点,我看不出这两者有什么不同.

fetcher.submit似乎比fetcher.load提供了更多的可配置性,例如,它可以使用POST、PUT、PATCH、DELETE方法和触发路由操作.

Typescript相关问答推荐

您可以创建一个类型来表示打字员吗

为什么缩小封闭内部不适用于属性对象,但适用于声明的变量?

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

如何在TypeScript对象迭代中根据键推断值类型?

找不到带名称的管道''

具有泛型类方法的类方法修饰符

有没有办法解决这个问题,类型和IntrinsicAttributes类型没有相同的属性?

如何使用函数填充对象?

TypeScrip表示该类型不可赋值

如何根据特定操作隐藏按钮

使用动态主体初始化变量

带下拉菜单的Angular 响应式选项卡

如何在react组件中使用doctype和html标签?

刷新页面时,TypeScrip Redux丢失状态

如何在省略一个参数的情况下从函数类型中提取参数类型?

Angular material 无法显示通过API获取的数据

专用路由组件不能从挂钩推断类型

如何在脚本中输入具有不同数量的泛型类型变量的函数?

打字脚本中的模块化或命名空间

KeyOf关键字在特定示例中是如何工作的