我在React中有一个Web应用程序,我需要实现一个联系表。使用create-react-app创建应用程序,并添加服务器文件夹。对于表单,我使用了sendgrid邮件。服务器在端口4567上工作吗,应用程序如何构建才能在域上工作?这是一个一页的应用程序。
谢谢,这很重要。
答案 0 :(得分:0)
在package.json中添加
"proxy": "http://localhost:4567"
答案 1 :(得分:0)
在生产环境中运行时,React应用程序是简单的HTML,CSS和JavaScript。这些文件在被请求时从服务器发送到客户端,其处理方式与处理任何网页的请求/响应相同。在您的React应用准备好投入生产之前,需要完成一些步骤
1:创建生产版本
首先,您需要创建应用的生产版本。此过程将所有单独的.js
或.jsx
文件都放到一个缩小的文件中,对于.css
也是一样。然后,您的index.html
被更新为在CSS中包含link
,在JS中包含script
。这样做是为了只发送三个文件,而不是开发中存在的10或100。
如果您使用create-react-app
启动应用程序,则可以使用以下命令:
npm run build
为此。否则,您需要安装webpack,然后运行:
node_modules/.bin/webpack --config webpack.prod.js --mode production
(您可能希望将其作为脚本添加到package.json
)。
有关更多信息,请参见React: Optimizing Performance。
2。服务您的应用程序
现在,您的服务器应具有用于您的应用程序的路由,并且在该路由上收到请求时,服务器应通过从您的index.html
目录(其中client/build/
React应用的目录)。
以下是一个使用Node / Express作为服务器的示例(在client/
中):
app.js
请注意,这只是使用Node发送静态文件的方式,并且可以在任何服务器上轻松完成。
其他
您提到要与您的申请一起提交表格。如果您的接收POST请求的路由与表单所使用的路由匹配(例如,表单在const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname), 'client', 'build', 'index.html');
});
上并且服务器在/form
上侦听POST),则可以使用默认的HTML表单提交。但是,这不是使用React时做事的好方法,因为路由将由您的服务器而不是React控制。相反,您应该使用某种AJAX方法提交表单。
由于您的服务器现在正在提供您的React应用程序(而不是像在开发中那样由React提供服务),因此您只需提出相对请求,这些请求就会发送给您的服务器。例如,请求(使用fetch API):
/form
默认情况下将设为const models = await fetch('/api/models');
。