gpt4 book ai didi

javascript - 在 expressjs 上动态转换和服务 React 应用程序

转载 作者:行者123 更新时间:2023-11-29 19:13:12 25 4
gpt4 key购买 nike

部署react应用程序的通常过程很简单,使用webpack处理代码转换,最终结果是一个.js包含所有 css/js/html 的应用程序。但是我有一个应用程序需要来自客户端请求的一些数据来表达服务器。

例如,我想从请求中获取一个 userid,并基于此向 App 组件提供一些数据,然后提供一个 .js 包含应用程序和用户特定数据的文件(就像 webpack 提供的一样)。

我试过,给用户 babel-core/registerreact-dom/server.renderToString,但它只是提供给 htmlcss 而不是使应用运行所需的 js 代码。我必须单独加载这些代码!

最佳答案

这是一个很常见的问题。最好以与您尝试的方式稍有不同的方式解决它(您不想强制您的用户等待 ~10 秒来为他构建 bundle )

  1. 有一个适用于所有用户的通用构建包(或少数 - 例如,一个适用于普通用户,第二个适用于管理员用户)
  2. 您的服务器从您的用户那里获取带有特殊参数的请求,例如 userid
  3. 您的服务器呈现起始 html 页面作为对此请求的响应 - 例如 index.html。这个文件应该有 <script src为您的用户捆绑 js。源路径应该由服务器动态构建以指向精确的 js 包(如果有多个)。它还应该有 javascript 全局对象,其中包含来自服务器的参数,您的组件应该可以看到这些参数。例如 index.html 可能看起来像(你可以做不同的事情,也许不创建全局对象。我希望你对这个想法有一般的了解)。 :
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="root"></div>
<script>
__CONFIG__ = {
someObject1: '<!-- @echo someObject1 -->',
someObject2: '<!-- @echo someObject2 -->',
userid: '<!-- @echo userid -->',
}
</script>
<script src="<!-- @echo SOME_PATH -->/static/bundle.js"></script>
</body>
</html>

现在您的组件可以检查全局变量 CONFIG 。但我建议不要在你的普通组件中使用它!创建 Bootstrap 组件来加载您的普通 React 应用程序,它就像您的应用程序和环境之间的桥梁。读取此 Bootstrap 组件中的全局配置,然后将其作为 Prop 传递给您的应用程序。

这个 Bootstrap 组件可能看起来像:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
const config = window.__CONFIG__;

ReactDOM.render(
<App
config={config}
/>, document.getElementById('root'));

编辑:如果您必须根据数据库设置初始状态或告诉 react 做某事,这也是一个好方法。为此,我添加了额外的全局变量 __INIT__

关于javascript - 在 expressjs 上动态转换和服务 React 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37251857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com