将React表单添加到现有PHP项目时 外部index.js无法加载如何解决
问题排查步骤
- 检查依赖是否完整:
type="text/babel"类型的脚本必须依赖Babel Standalone前置脚本才能被浏览器解析执行,如果你的PHP页面没有提前引入该依赖,也没有引入React、ReactDOM的UMD版本脚本,浏览器会直接忽略这类自定义脚本,不会加载运行。 - 检查文件路径配置:你代码中写的是
<script src ="index.js" type="text/babel"></script>,如果你的目标加载文件是form.js请直接修改src属性值;同时确认index.js、Form.js和当前PHP页面的相对路径是否匹配,比如JS文件存放在站点js目录下,就需要将src属性值调整为/js/index.js。 - 打开浏览器开发者工具的「网络」面板,检查
index.js、Form.js的请求状态:如果返回404说明文件路径配置错误,调整src的路径到正确地址即可;如果返回200但没有执行,就是Babel依赖缺失或者语法不兼容问题,按下方步骤调整即可。 - 调整语法适配浏览器端实时编译:Babel Standalone在浏览器端直接运行时默认不支持
import/export的ES模块语法,你需要调整代码写法,参考如下:- 首先在PHP页面中按顺序引入前置依赖和自定义脚本
<!-- 放在所有自定义JS之前引入React、ReactDOM、Babel Standalone的UMD版本脚本 --> <script crossorigin src="替换为React的UMD包地址"></script> <script crossorigin src="替换为ReactDOM的UMD包地址"></script> <script src="替换为Babel Standalone的UMD包地址"></script> <!-- 确保页面里有id为root的React挂载容器 --> <div id="root"></div> <!-- 注意要先引入Form组件脚本,再引入index.js脚本 --> <script src="Form.js" type="text/babel"></script> <script src="index.js" type="text/babel"></script>- 修改
Form.js代码,删除导入导出语句
class Form extends React.Component { render() { console.log("Testing") return ( <div> <h3>Testing</h3> </div> ) } }- 修改
index.js代码,删除导入语句
ReactDOM.render(<Form />, document.getElementById('root')); - 如果你确实需要保留
import模块化语法,不要用Babel Standalone的浏览器实时编译方案,改用Vite等构建工具将React代码打包成浏览器原生可识别的JS文件后,再引入到PHP页面中,可避免浏览器端实时编译的各类兼容问题。
内容的提问来源于stack exchange,提问作者user8840249
相关产品推荐
相关产品推荐

