尝试在getServerSideProps上下文中访问apolloClient

时间:2020-05-28 22:22:46

标签: javascript next.js

我正在将Next.js 9.3.5与Apollo和GraphQL一起用于我正在从事的SSR项目。我已经实现了官方页面中提供的以下示例:

https://github.com/vercel/next.js/blob/canary/examples/with-apollo/lib/apollo.js

所以我的页面看起来像这样:

import { withApollo } from '../apollo/withApollo';

const Collections = (props) => {
   // ...
}

export const getServerSideProps = async ({ apolloClient }) => {
  console.log(apolloClient); // returns undefined

  return {
    props: {},
  };
};

export default withApollo()(Collections);

问题是apolloClientgetServerSideProps内部不可用。但是,如果我使用getInitialProps,则可以正常工作。 Next.js官方文档说我们应该使用getServerSideProps

如果您使用的是Next.js 9.3或更高版本,我们建议您使用 getStaticProps或getServerSideProps而不是getInitialProps。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我只是使用它并在任何地方调用以获取getServerSideProps中的客户端访问权限

 export async function getStandaloneApolloClient() {
        const { ApolloClient, InMemoryCache, HttpLink } = await import(
            "@apollo/client"
            );
        return new ApolloClient({
            link: new HttpLink({
                uri: process.env.BASE_URL,
                fetch
            }),
            cache: new InMemoryCache()
        });
    }