javascript - ReactJS 在 Symfony 项目中导入后会破坏代码
问题描述
我正在尝试将 ReactJS 集成到我的 Symfony 5 项目中,但在导入它之后,它似乎破坏了代码。
我已经按照Symfony 文档和Symfony Casts 系列中提到的步骤进行操作:
- 在 Symfony 项目上安装 Webpack Encore。
- 安装开发依赖项
react
和react-dom
. - 创建一个类似
app_react.js
in的文件assets/js/
,然后将其作为新条目添加到webpack.config.js
with.addEntry('app_react', './assets/js/app_react.js')
。 - 参考与
app_react.js
_base.html.twig
<script src="{{ asset('build/app_react.js') }}"></script>
- 在 Webpack Config 上启用 React 预设:
.enableReactPreset()
- 在 (ie) 中创建一个 HTML 元素
templates/user/base.html.twig
:<div id="app-react"></div>
yarn encore dev --watch
用(一切都编译)编译资产。- 导入
React
_app_react.js
在这一点之后,如果我只调试一个简单console.log('Hello world')
的打印,但如果我导入React
后没有代码被执行。我已经尝试过使用 React 打印一些代码的常用方法:
import React from 'react';
import ReactDOM from 'react-dom';
console.log('This is not being printed');
const SomeText = () => (
<h2>Some Text</h2>
);
ReactDOM.render(<SomeText />, document.getElementById('react-app'));
这是浏览器源显示app_react.js
文件的内容:
以防万一,这是我的webpack.config.js
文件:
var Encore = require('@symfony/webpack-encore');
if (!Encore.isRuntimeEnvironmentConfigured()) {
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
}
Encore
.setOutputPath('public/build/')
.setPublicPath('/build')
.copyFiles({
from: './assets/image'
})
.addEntry('app', './assets/js/app.js')
.addEntry('app_react', './assets/js/app_react.js') // Step 3
.autoProvidejQuery()
.splitEntryChunks()
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.configureBabelPresetEnv((config) => {
config.useBuiltIns = 'usage';
config.corejs = 3;
})
.enableSassLoader()
.enableReactPreset() // Step 5
;
module.exports = Encore.getWebpackConfig();
那么,我在这里做错了什么?
解决方案
我认为您的问题可能在第 4 步。而不是使用
<script src="{{ asset('build/app_react.js') }}"></script>
应该是:
{{ encore_entry_script_tags('app_react') }}
Webpack encore 将查找manifest.json
以找出要包含的文件。可能不仅仅是app_react.js
文件。
推荐阅读
- excel - 非相邻单元格作为数组函数的输入(MIN 和 ISBLANK)
- r - mutate_at 和 case_when 语句
- python - 使用python向具有不同文件附件的不同收件人发送电子邮件
- node.js - 推送通知 Ionic
- javascript - 如何将此箭头函数转换为普通函数表达式以帮助我更好地理解它
- reactjs - 如何从 props 初始化反应功能组件状态
- rest - Apache Camel Rest 为发布请求发送响应
- vba - VBA 将用户窗体控件作为参数传递
- java - 这是什么意思:CertPathValidatorException:路径不与任何信任锚链接
- html - 为什么 Firefox 放弃了对 HTML5 的支持
标签?