javascript - 将数据从 html 引导到 webpack 捆绑的 javascript

标签 javascript html scala reactjs webpack

我最近将一个 React 应用程序从全局无处不在的脚本标签每个 js 文件设置转换为捆绑的 webpack 应用程序(太棒了!)。

但是,在最初的应用程序中,我能够在脚本中公开全局初始化函数,然后从我的 Scala Play 后端在生成的 html 服务器中呈现调用。例如

// Component.js
class MyComponent extends React.Component {
    render() {
        <div> {this.props.myData} </div>
    }
}
initComponent(data) {
    ReactDOM.render(
        <MyComponent myData={data} />
    ) 
}

然后在后端:

// ComponentPage.scala.html
...
<script> 
  $(() => initComponent(@scala.serverVariable.getData(currentUser))
</script>

现在我的 javascript 已捆绑(并最终缩小/丑化),我无法让 scala 后端知道要调用的函数的损坏/最终名称。有没有办法告诉 webpack 将某些功能保持全局?是否有更好的模式可用于将服务器端数据引导到 react 组件中?

以下是我考虑过的两种方法:

  • 我可以使它成为一个加载/完整样式的组件,其中有一个微调器,然后是一个对服务器的 ajax 调用以获取正确的数据,但是由于我在渲染时已经有了可用的数据,我宁愿不招致从客户端到服务器的额外往返。
  • 我可以将数据包含在具有数据属性的标记中,并在 DocumentReady 时获取它,但是序列化/反序列化对复杂对象有限制,这感觉很麻烦。

最佳答案

只需将函数附加到 window 对象即可。这将防止名称混淆。

window.initComponent = function(data) {
  ReactDOM.render(
    <MyComponent myData={data} />
  ) 
}

同样(为了明确):

// ComponentPage.scala.html
...
<script> 
  $(() => window.initComponent(@scala.serverVariable.getData(currentUser))
</script>

关于javascript - 将数据从 html 引导到 webpack 捆绑的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395745/

相关文章:

scala - 如何使用 specs2 对测试进行分组?

c# - 谷歌地图 API v3 没有响应

javascript - 我可以动态地将一个模块注入(inject)另一个模块吗?

javascript - 单击 puppeteer 中包含文本的元素

javascript - Android Webview 无法处理 javascript?

scala - 在 Scala 中调用反射案例类构造函数

json - 使用 Circe 光学器件修改对象的所有字段或数组的所有项目

javascript - 在 Javascript 中正确格式化 JSON 数组

html - 如何在 td 之间创建空间并对齐 td 内的内容

javascript - ng-include 和 $templateCache