javascript - 将 React 与带有 JSX 的现有应用程序一起使用
问题描述
我们正计划为我正在开发 10 年的 CMS 项目转换新技术,例如 react。
到目前为止,前端的一切都很简单明了。
首先包含 jquery.js,然后在必要时包含组件和第三方脚本,然后编写代码并与 DOM 共舞。
但是现在,当我试图跳入更高水平的技术和不同的方法时,事情对我来说很容易变得非常复杂。
在花了 10 多个小时阅读 React 文档和教程后,我对它是什么以及它是如何工作的有了很好的理解。
但是我意识到我对一些流行的概念非常陌生。我从未使用过 node.js,从未使用过 npm、babel、webpack 以及其他许多我在任何地方都见过的“新”东西。由于 React,我与这些工具面对面,我坚信这些是现代前端开发的必然。
现在的问题
我们的 CMS 在 PHP 上运行,并且在前端严重依赖 MooTools。我不想完全重写已有 10 年历史的 CMS,我只想在某些情况下部分尝试新技术。决定从 React 开始。
对于这种情况,我也想将ag-Grid集成到 React。
我不明白的是如何将所有这些工具结合在一起。
由于 ag-Grid,我将无法使用简单的 include js 反应方式。
在示例中,编写的代码有一些 JSX。这意味着我们编写 JSX 并运行它为浏览器翻译以测试它是否正常。
- 每次测试前我都需要翻译这些文件吗?
- 而且,如果文件被翻译,调试会变得非常复杂吗?
- babel 可以在运行时实现吗?如果是,这是一个好习惯。
- node_modules 文件夹中有很多文件。我应该在生产中包括哪些?
网络上的所有资源都非常理论化,并且假设有知识。需要一些最佳实践指导。
有很多问题,而不是从开始到生产的一步一步的指南。
解决方案
JSX 是对符合规范的 JavaScript 的扩展。它是React.createElement(...)
React 开发的语法糖并且是可选的。
React 可以用普通的 ES5 编写:
React.createElement("div", { foo: "foo" });
而不是 JSX:
<div foo="foo" />
或者使用类似的辅助函数h
实现相同的目标,例如react-hyperscript
.
有 PHP后端应用程序这一事实并不妨碍使用 JSX开发 React前端应用程序。这可能需要将 React 项目配置为不使用内置的 Express Web 服务器并将客户端应用程序构建到自定义位置,即现有应用程序的公共文件夹。如果create-react-app
使用,这可能需要弹出项目)。
每次测试前我都需要翻译这些文件吗?
它们应该被转译为纯 JavaScript(如果它针对的是旧版浏览器,则为 ES5)。当客户端项目以监视模式运行时(通常npm start
),它们可以在源文件的每次更改时被翻译。
而且,如果文件被翻译,调试会变得非常复杂吗?
这就是源地图的用途。
babel 可以在运行时实现吗?如果是,这是一个好习惯。
可以在运行时使用 Babel,这不是一个好的做法,即使在开发环境中也是如此。
node_modules 文件夹中有很多文件。我应该在生产中包括哪些?
node_modules 的内容无关紧要。几乎所有这些都是构建客户端应用程序所需的开发依赖项。这是打包器的任务,它是模板中的 Webpack create-react-app
。它将项目依赖项构建到dist
文件夹中的纯 JS。
推荐阅读
- angular - 从异步第一个 api 调用获取响应(需要时间来获取响应)并将其传递给第二个异步 api 以获得最终响应
- apple-watch - Xcode 11 - 为 Apple Watch 添加新目标
- c# - .NET Core 中的更新尝试引发异常
- javascript - JavaScript getElementByID - JavaScript 代码中的错误(字段留空,但单击时未变为红色)
- java - 如果从 IntelliJ IDEA 运行应用程序,则找不到 Mapstruct 生成的类
- java - collection.add(()->7); 中 ()-> 的功能是什么?
- dialogflow-es - 在 java 中使用服务帐户凭据(.json 文件)创建/更新 Dialogeflow 代理
- rabbitmq - RabbitMQ 支持 LIFO 或基于时间的优先级队列
- php - 如何通过mysql语句从文件夹中删除图像
- python - 我如何使用 IBM Watson 翻译文档功能将翻译后的文件实际获取到我的计算机上