在常规的 React 应用程序中,我会使用 Redux 来管理状态,在匹配中的任何路由之前我会调度初始数据App
,但是,在 Remix 中不建议使用 Redux,所以我正在使用useContext
。
有没有办法调用加载器来获取初始数据(例如会话、对象等)之前/不必匹配任何路由,然后将该数据存储在context
全局存储中,然后可以被存储中的任何组件访问?这样,API 只会在应用初始化期间被调用。
我此时正在调用 loader 中的初始数据root.tsx
,获取它,useLoaderData
然后将其作为道具传递StoreProvider
以在全局状态下调度它,但是,我认为不应该那样做。
export let loader: LoaderFunction = async ({ request }) => {
let user = await getUser(request);
const products = await db.product.findMany();
return { user: user?.username, products };
};
function App() {
const data = useLoaderData<LoaderData>();
return (
<html lang="en">
...
<StoreProvider initData={data}>
<body>
...
<Outlet />
<ScrollRestoration />
<Scripts />
{process.env.NODE_ENV === "development" && <LiveReload />}
</body>
</StoreProvider>
</html>
);
}
export default App;