Сам не пользовался, но по докам вроде никаких магических параметров не вижу.
Вот тебе тогда вспомогательные функции которые сделают то, что тебе надо:
import { json, useLoaderData } from "react-router-dom";
import { useEffect } from "react";
export function eagerLoader(loader) {
return (...args) => {
const promise = loader(...args)
.then(res => res instanceof Response ? res.json() : res );
return json({ promise }, { status: 200 });
}
}
export function useEagerLoaderData(defaultData) {
const [data, setData] = useState(defaultData);
const promise = useLoaderData()?.promise;
useEffect(() => {
promise?.then(setData);
}, [promise]);
return data;
}
let route = {
path: "...",
loader: eagerLoader(({ request }) => ...),
lazy: () => import("./Comp"),
};
const Comp = () => {
const data = useEagerLoaderData([]);
//...
}
Код не проверял, но думаю логика очевидна.:)
P.S. defaultData мб стоит вынести в обёртку eagerLoader, хз, тут сам смотри свои юзкейсы.:)