NextJS项目中getStaticProps未被调用问题排查求助
getStaticProps 未触发排查方案
- 首先确认
getStaticProps的存放位置:只有pages目录下的页面文件导出的getStaticProps才会被Next.js识别执行,如果你把这个方法写在components目录的普通组件、或者非页面文件里,肯定不会触发。先核对你写方法的主组件是不是直接放在pages目录下的页面文件。 - 检查导出写法:
getStaticProps必须是文件顶层的命名导出,写法为export async function getStaticProps() {},不能写在组件内部,也不能作为默认导出,写错导出方式会直接不被识别。 - 核对
_app.tsx参数传递:自定义App组件时,必须把接收到的pageProps完整传递给页面组件,也就是渲染时要写<Component {...pageProps} />,如果漏传pageProps,页面不仅拿不到getStaticProps返回的数据,也可能导致静态方法执行异常,这也是你怀疑的最可能的问题点。 - 区分日志输出位置:
getStaticProps是服务端/构建阶段执行的方法,日志只会输出在你运行next dev/next build的终端控制台,不会出现在浏览器控制台,很多人会搞混这点去浏览器找日志,自然看不到打印内容。 - 排除内部逻辑阻塞问题:你可以先把
getStaticProps内部的Apollo查询逻辑全部删掉,只保留最简单的返回和打印,比如:
先确认方法本身有没有被触发,如果简化后能看到终端打印,就说明是你内部调用的Apollo Client有配置问题,比如服务端地址错误、鉴权参数缺失导致查询卡住,再针对性排查Apollo配置即可。export async function getStaticProps() { console.log('方法触发了') return { props: { test: '123' } } }
内容的提问来源于stack exchange,提问作者Prinny
相关产品推荐
相关产品推荐

