document.js中getInitialProps函数运行在服务端、客户端还是双端?
关于Next.js自定义
_document中getInitialProps的执行环境 结论
你贴出的MyDocument类里的静态方法getInitialProps,仅会在服务端运行,不会在客户端执行。
验证和原理说明
_document.js是Next.js提供的、用来自定义整个HTML文档根结构的特殊文件,它的所有逻辑只会在服务端生成HTML响应的阶段执行,相关代码根本不会被打包到发送给浏览器的客户端JS bundle里。
你在方法里写的console.log("document.js")是最好的验证方式:这行日志永远只会出现在你启动Next.js服务的终端输出里,打开浏览器的开发者工具控制台,永远看不到这行打印。
不同场景的触发规则
- 用户首次打开站点页面的服务端渲染阶段:服务端会执行这个方法,拿到初始props后拼接完整的HTML内容返回给浏览器
- 用户在站点内通过
next/link、router.push做客户端路由跳转时:完全不会触发这个方法,因为客户端路由切换只需要拉取目标页面的片段内容,不需要重新生成整个HTML文档骨架
别和普通页面文件里的
getInitialProps搞混:页面级的getInitialProps确实是首屏跑在服务端、客户端路由跳转时跑在客户端,但_document属于全局文档级的特殊文件,它的getInitialProps没有双端执行的逻辑。
内容的提问来源于stack exchange,提问作者ali marefati
相关产品推荐
相关产品推荐

