Next JS - getStaticProps 不返回任何内容

tes*_*one 10 reactjs next.js

我正在使用带有上下文 API 和样式组件的 Next.js,但我似乎无法开始getStaticProps工作。

我读过其他帖子,他们经常谈论_app我所拥有的自定义,但在使用 context API 之前我从未遇到过这个问题。我也尝试过该getInitialProps功能,但没有成功。我还应该注意到,即使在不包含上下文包装器之后,我也没有得到函数的响应,所以我根本不知道该在哪里查看。

这是我的代码。你能看到发生了什么事吗?

import React from 'react';
import fetch from 'node-fetch';

export default function Header(props) {
  console.log(props.hi);
  return <div>Hey dis header</div>;
}

export async function getStaticProps(context) {
  return {
    props: {
      hi: 'hello',
    },
  };
}
Run Code Online (Sandbox Code Playgroud)

我尝试从该函数进行日志记录,但没有任何记录,所以我想问题是该函数由于某种原因没有运行。

这是我的自定义_app文件

import { GlobalContextWrapper } from 'context';
import Header from 'components/header/Header';
import App from 'next/app';

function MyApp({ Component, pageProps }) {
  return (
    <GlobalContextWrapper>
      <Header />
      <Component {...pageProps} />
      <p>footer</p>
    </GlobalContextWrapper>
  );
}
MyApp.getInitialProps = async (appContext) => {
  // calls page's `getInitialProps` and fills `appProps.pageProps`
  const appProps = await App.getInitialProps(appContext);

  return { ...appProps };
};

export default MyApp;
Run Code Online (Sandbox Code Playgroud)

这是我的上下文文件

import { useReducer } from 'react';
import initialState from './intialState';
import reducer from './reducer';
import GlobalStyle from '../GlobalStyle';
import theme from '../theme';
import { ThemeProvider } from 'styled-components';

export const GlobalContext = React.createContext();

export function GlobalContextWrapper({ children }) {
  const [globalState, dispatch] = useReducer(reducer, initialState);
  return (
    <GlobalContext.Provider value={{ globalState, dispatch }}>
      <GlobalStyle />
      <ThemeProvider theme={theme}>{children}</ThemeProvider>
    </GlobalContext.Provider>
  );
}
Run Code Online (Sandbox Code Playgroud)

tes*_*one 12

问题是我没有从页面导出此函数,而是从组件和自定义应用程序文件导出。

有谁知道我可以解决这个问题的方法吗?问题是我有一个从响应中获取数据的标头,并且我希望该标头显示在每个页面上,而不必手动将其添加到每个页面并重复 getStaticProps 函数


ngh*_*aht 3

基于您的代码的解决方案只是在您的代码中获取数据_app.js - getInitialProps并将其传递给Header

function MyApp({ Component, pageProps }) {
  return (
    <GlobalContextWrapper>
      <Header data={pageProps.header}/>
      <Component {...pageProps} />
      <p>footer</p>
    </GlobalContextWrapper>
  );
}
MyApp.getInitialProps = async (appContext) => {
  // calls page's `getInitialProps` and fills `appProps.pageProps`
  const appProps = await App.getInitialProps(appContext);


  const headerData = ....

  return { ...appProps, header: headerData };
};
Run Code Online (Sandbox Code Playgroud)