useRouteLoaderData
这个钩子可以让当前呈现的路由数据在树中的任何位置都可用。这对于树中较深位置的组件需要更远位置路由的数据,以及父路由需要树中较深位置子路由的数据时非常有用。
IMPORTANT
此功能只有在使用数据路由器时才有效,请参阅"选择路由"。
jsx
import { useRouteLoaderData } from "react-router-dom";
function SomeComp() {
const user = useRouteLoaderData("root");
// ...
}
import { useRouteLoaderData } from "react-router-dom";
function SomeComp() {
const user = useRouteLoaderData("root");
// ...
}
React 路由器使用确定的、自动生成的路由 id 在内部存储数据,但您也可以提供自己的路由 id,让此钩子更易于使用。考虑一个定义了 id 的路由器:
jsx
createBrowserRouter([
{
path: "/",
loader: () => fetchUser(),
element: <Root />,
id: "root",
children: [
{
path: "jobs/:jobId",
loader: loadJob,
element: <JobListing />,
},
],
},
]);
createBrowserRouter([
{
path: "/",
loader: () => fetchUser(),
element: <Root />,
id: "root",
children: [
{
path: "jobs/:jobId",
loader: loadJob,
element: <JobListing />,
},
],
},
]);
现在,用户可以在应用程序的任何其他地方使用。
jsx
const user = useRouteLoaderData("root");
const user = useRouteLoaderData("root");
唯一可用的数据是当前已呈现的路由。如果您要求从当前未呈现的路由中获取数据,钩子将返回 undefined
。