如何使用 nextjs 开始获取每个应用程序的数据

How can I fetch data on every app start using nextjs

我有一个用 nextjs 创建的博客应用程序。我想从 api 获取菜单 (nav) 并加载到 Nav 组件。但是我怎样才能在每次刷新时获取菜单并将其保存到反应上下文 api?我尝试从主页获取菜单并将其保存到反应上下文 api,但在其他页面上菜单不可用。

const MyApp = ({ Component, pageProps }) => {
  const [queryClient] = React.useState(() => new QueryClient());

  return (
    <AppProvider>
      <QueryClientProvider client={queryClient}>
        <Hydrate state={pageProps.dehydratedState}>
          <Component {...pageProps} />
          <ReactQueryDevtools />
        </Hydrate>
      </QueryClientProvider>
    </AppProvider>
  );
};

MyApp.getInitialProps = async (appContext) => {
  const appProps = await App.getInitialProps(appContext);

  const response= await apiClient().get('/api/index');

  const { setMenus } = useAppContext(); // This line not working
  setMenus(response.data);

  return { ...appProps };
};

不确定你的策略是什么,但你可以选择任何一种方式,将菜单传递给你的供应商或使用钻孔道具:

const MyApp = ({ Component, pageProps }) => {
  // OR pass those menus to the provider
  const {menus} = pageProps;


  // OR the response already passed to every page entry point at pageProps
  return (
    <AppProvider value={menus}>
      <Component {...pageProps} />
    </AppProvider>
  );
};

MyApp.getInitialProps = async (appContext) => {
  const appProps = await App.getInitialProps(appContext);

  const response= await apiClient().get('/api/index');
  return { ...appProps, menus: response.data };
};

// Now from every entry page like MenuPage, the menu should be available OR use it as context consumer
const MenuPage = ({menu}) => {...}