React部署后首次加载白屏问题咨询(Nginx+Azure环境)
前端路由与Nginx配置不匹配
如果你用了React的BrowserRouter,Nginx默认会把非根路径的请求当作静态文件查找,找不到就返回404,直接导致白屏。刷新时如果是从根路径进入,或者Nginx没配置try_files $uri $uri/ /index.html;,首次访问子路径就会触发这个问题——因为React的路由是客户端接管的,Nginx得把所有路由请求都转发到index.html。资源加载异常
打包后的chunk文件、CSS资源可能因为Azure的存储/CDN同步延迟,首次加载时某个资源还没部署完成,或者网络波动导致加载超时,React无法完成初始化。刷新后要么资源已经同步到位,要么浏览器缓存了可用的资源,就能正常渲染。另外如果打包时资源路径配置错误(比如publicPath设置不对),也会导致首次加载资源404,刷新可能因为缓存或者路径解析巧合成功。React Hydration 失败
如果你的应用用了服务端渲染(SSR)或者静态生成(SSG),服务端输出的HTML和客户端React渲染的DOM结构不一致,就会触发hydration失败,React中断渲染导致白屏。刷新时客户端会跳过hydration直接从头渲染,所以能正常显示。比如服务端渲染时依赖的某个数据和客户端首次请求的数据不一样,或者DOM里有服务端插入的动态内容没和客户端同步。Nginx缓存策略问题
要是Nginx把index.html设置了强缓存,而你部署新代码时JS/CSS资源的文件名没加哈希(比如用了[contenthash]),首次加载时浏览器会用旧的index.html去请求已经不存在的旧资源,导致白屏。或者缓存过期时间设置过长,新旧资源冲突,刷新后可能强制刷新了缓存,拿到新的资源就正常了。Azure平台冷启动延迟
如果你的Azure服务是按需启动的(比如App Service的免费层或弹性实例),首次请求时会触发冷启动,Nginx和应用服务还没完全初始化完成,导致部分资源加载超时或响应异常。刷新时服务已经暖启动,所有组件都就绪,就能正常加载。代码逻辑的潜在错误
某些组件在首次渲染时依赖异步数据,但没处理好加载状态或错误边界。比如首次加载时接口响应慢,组件直接渲染了未定义的数据导致报错白屏;刷新时接口数据已经被缓存,或者响应更快,组件能正常渲染。另外,全局的错误捕获没做好,小错误就导致整个应用崩溃,刷新时可能避开了触发条件。
内容的提问来源于stack exchange,提问作者priyam khatri

