我试图理解为什么会有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