You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+Express服务端渲染(SSR)按钮点击函数无法触发问题求助

问题根因
  • 缺少客户端JS执行逻辑:服务端仅返回了SSR生成的静态HTML字符串,返回的HTML中未引入客户端React打包产物,ReactDOM.hydrate 逻辑从未执行,导致事件绑定、生命周期函数都不会触发。
  • 静态资源配置错误:server/server.js 中静态资源目录指向了源码目录./src,源码为ES6+语法,浏览器无法直接解析运行。
  • 执行流程缺失:直接启动服务端前未打包客户端代码,没有生成浏览器可执行的JS产物。
  • 文件名大小写不匹配:源码文件为src/app.js,服务端代码中引用为import App from "../src/App",大小写不一致在类Unix系统下会直接报错。
修复步骤
  1. 修改public/index.html,在</body>标签前添加客户端打包产物的引入,react-scripts默认的public/index.html已经预留了打包后JS的注入位置,你只需要保证服务端替换HTML内容时,只替换<div id="root"></div>部分,保留原有script注入逻辑即可,build后会自动插入对应script标签。

  2. 修改server/server.js静态资源配置:
    将app.use(express.static('./src'));修改为:

app.use(express.static('./build'));
  1. 调整执行流程:修改package.json中的ssr脚本,增加打包前置逻辑:
"ssr": "npm run build && node server/index.js"
  1. 修正文件名大小写问题:将src/app.js重命名为src/App.js,和引用路径保持一致。
验证操作

修改完成后执行npm run ssr,访问localhost:8080即可正常触发点击事件和生命周期函数。

内容的提问来源于stack exchange,提问作者NineO。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:48:04