getStaticProps возвращает пустой объект

Я использую nextJS V9.5.5 с wp-graphql и apolloClient для получения данных из WordPress. Все работает нормально, но когда я пытаюсь вернуть контекст (с целью получения запроса) из getStaticProps (), как описано в документации, он возвращает пустой объект.

Пользовательское приложение:

import React from "react";
import getConfig from "next/config";
import LayoutOuter from "../components/LayoutOuter";
import "bootstrap/dist/css/bootstrap.css";
import { ApolloProvider } from "@apollo/client";
import { useApollo } from "../lib/apolloClient";
import { initializeApollo } from "../lib/apolloClient";
import { gql } from "@apollo/client";

const { serverRuntimeConfig, publicRuntimeConfig } = getConfig();
const { DOMAIN } = publicRuntimeConfig;
function CustomApp({ pageProps, Component, props }) {
  const apolloClient = useApollo(pageProps.initialApolloState);

  return (
    <ApolloProvider client={apolloClient}>
      {console.log("_app", props)}
      <LayoutOuter>
        <Component {...pageProps} />
      </LayoutOuter>
    </ApolloProvider>
  );
}

CustomApp.getInitialProps = async (ctx) => {
  const apolloClient = initializeApollo();

  await apolloClient.query({
    query: gql`
      {
        // my graphql query here
      }
    `,
  });
  return {
    props: {
      initialApolloState: apolloClient.cache.extract(),
      ctx: JSON.stringify(ctx),
    },
  };
};

export default CustomApp;

Одна из страниц:

import React, { Component, useEffect, useState } from "react";
import getConfig from "next/config";
import { NextSeo } from "next-seo";

const { serverRuntimeConfig, publicRuntimeConfig } = getConfig();
const { DOMAIN, SITENAME } = publicRuntimeConfig;

import { initializeApollo } from "../lib/apolloClient";
import { gql } from "@apollo/client";
import "./services.module.scss";


const Home = (props) => {
  let currentPage = Object.values(props.initialApolloState.ROOT_QUERY)[1];

  const {
    title,
    metadesc,
    metaRobotsNoindex,
    metaRobotsNofollow,
    metaRobotsAdv,
    opengraphTitle,
    opengraphDescription,
    opengraphImage,
    twitterTitle,
    twitterDescription,
    twitterImage,
  } = currentPage.seo;

  return (
    <>
      {console.log("project", props)}
      <NextSeo
        noindex={metaRobotsNoindex}
        nofollow={metaRobotsNofollow}
        title={title != "" ? title : `${props.data.pagetitle} - ${SITENAME}`}
        description={metadesc}
        canonical={DOMAIN}
        openGraph={{
          url: DOMAIN,
          title:
            opengraphTitle != ""
              ? opengraphTitle
              : `${props.data.pagetitle} - Garrison Collection`,
          description: opengraphDescription,
          images: [
            {
              url: opengraphImage,
              width: 800,
              height: 600,
              alt: { SITENAME },
            },
          ],
          site_name: { SITENAME },
        }}
      />
      <p>works</p>
    </>
  );
};

export async function getStaticProps(context) {
  const apolloClient = initializeApollo();

  await apolloClient.query({
    query: gql`
      {
        project(id: "ca-souls", idType: SLUG) {
          seo {
            canonical
            metaDesc
            metaKeywords
            metaRobotsNofollow
            metaRobotsNoindex
            opengraphAuthor
            opengraphDescription
            opengraphModifiedTime
            opengraphPublishedTime
            opengraphPublisher
            opengraphSiteName
            opengraphTitle
            opengraphType
            opengraphUrl
            title
            twitterDescription
            twitterTitle
          }
        }
      }
    `,
  });

  return {
    props: {
      initialApolloState: apolloClient.cache.extract(),
      context: JSON.stringify(context) || null,
    },
    revalidate: 1,
  };
}

export default Home;

Вот результат журнала:  журнал консоли

Как мне получить context.query?


person Daniel Barbakadze    schedule 22.12.2020    source источник


Ответы (1)


Параметр контекста включает previewData содержит набор данных предварительного просмотра пользователя setPreviewData. Это означает включение функции, следовательно, невозможность осознать. Выньте значения из context.params.

person Akihito KIRISAKI    schedule 22.12.2020