使用SSR时我的客户端代码为何会在Node后端被编译并运行?
React 项目迁移 SSR 执行环境错误标准解决方案
- 客户端专属逻辑统一收口到
useEffect钩子内执行,服务端渲染阶段会自动跳过useEffect执行,仅客户端注水完成后触发,从规则上避免document/window等Node环境不存在的API在服务端被调用。 - 不需要移除
fetch调用,在服务端引入node-fetch做polyfill即可实现跨环境兼容,也可直接替换为两端通用的请求库如axios。 - 客户端专属组件/依赖使用动态导入关闭SSR渲染,通用SSR框架可配合
typeof window !== 'undefined'判断做按需加载,避免服务端加载仅客户端可用的依赖包。 - 页面初始化数据统一走SSR框架提供的服务端预取钩子执行,预取结果注入组件props,仅用户交互触发的请求放在客户端执行。
- 禁止在组件顶层作用域直接调用客户端专属API,所有相关调用必须放在生命周期钩子、用户事件回调函数内。
- 原有临时环境判断方案可保留作为兜底防护,但不建议作为核心解决方案,避免逻辑分散后维护成本升高。
内容的提问来源于stack exchange,提问作者IneedHelp
相关产品推荐
相关产品推荐

