Next.js Apollo查询在NextJS';这是什么道具?

Next.js Apollo查询在NextJS';这是什么道具?,next.js,apollo,Next.js,Apollo,我和阿波罗一起使用NextJS。这些文件没有说太多,但指出了这一回购协议: 使用此代码的: export async function getStaticProps() { const apolloClient = initializeApollo() await apolloClient.query({ query: ALL_POSTS_QUERY, variables: allPostsQueryVars, }) return { props: {

我和阿波罗一起使用NextJS。这些文件没有说太多,但指出了这一回购协议:

使用此代码的:

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

  await apolloClient.query({
    query: ALL_POSTS_QUERY,
    variables: allPostsQueryVars,
  })

  return {
    props: {
      initialApolloState: apolloClient.cache.extract(),
    },
    unstable_revalidate: 1,
  }
}
我觉得这很难看,所以我试着用钩子:

const res = useQuery(ALL_POSTS_QUERY);
但我有一个错误:

错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一:


因此,您不能在
getStaticProps
getServerSideProps
中使用钩子吗?如果是这样的话,是否有更好的语法来进行GraphQL查询

您可以使用GraphQL代码生成器使其更好

例如,我正在做类似的事情,我的代码如下所示:

const response = await apolloClient.query<ViewerQuery>({
  query: ViewerDocument,
});
const response=wait apolloClient.query({
查询:ViewerDocument,
});

其中
ViewerQuery
ViewerDocument
是由GraphQL代码生成器生成的。

有这个库,但它提到了getInitialProps,这不是在下一个9 Hi中获取数据的当前方式!我在getServerSideProps中使用相同的代码,您能给我一些建议吗?在每个页面上初始化apollo以发送请求可以吗?我的目标是检查现有的动态路由我不确定创建一个新的apollo客户端有多轻量级。我认为这并不太糟糕,创建一个新对象与获取数据、执行SSR等相比应该可以忽略不计。如果您担心的话,您可以测量它。需要注意的一点是,服务器和客户端(浏览器)上的apollo客户端将具有不同的缓存,这可能会导致数据变异后出现一些不一致的结果。感谢@arcticmatt的回答!你能帮我解决我的问题吗。如果需要,我可以创建另一个stackoverflow问题。我试图为我的动态路由强制一个404状态代码,但是每个页面上的apollo客户端初始化都会有一些延迟,我失去了apollo的主要技巧-缓存。目前,我正在检查getServerSideProps中的现有路由。如果我在apollo钩子中检查它,它将返回202而不是404状态代码。非常感谢!这个问题和我的问题相似