带有 React 的 ScalaJS:在运行时找不到 React
ScalaJS with React: can't find React at runtime
我想 bootstrap 使用 ScalaJS 和 React 的简单项目。
它使用 fastOptJS
构建,然后我用 Chrome 打开我的 index.html
并且在运行时出现此错误:
显然,React 的运行时在浏览器中不可用。在 documentation 中,它没有提到 React 的任何单独导入,只是 build.sbt
.
的配置
我真的不明白我做错了什么。
这是我的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>The Scala.js Tutorial</title>
</head>
<body>
<!-- Include Scala.js compiled code -->
<script type="text/javascript" src="./target/scala-2.12/hello-fastopt.js"></script>
<!-- Run tutorial.webapp.TutorialApp -->
<script type="text/javascript">
web.TutorialApp().main();
</script>
</body>
</html>
这是我的TutorialApp.scala
package web
import japgolly.scalajs.react._
import org.scalajs.dom
import scala.scalajs.js.JSApp
import scala.scalajs.js.annotation.JSExport
import japgolly.scalajs.react.ReactComponentB
import japgolly.scalajs.react.vdom.prefix_<^._
object TutorialApp extends JSApp {
@JSExport
def main(): Unit = {
println("Hello world!")
val App =
ReactComponentB[Unit]("App")
.render(_ => <.div("Hello!"))
.build
ReactDOM.render(App(), dom.document.body)
}
}
您要么全局需要它(通过 index.html
中的 <script>
标签),要么使用 webjars。
如果你想使用webjars/jsDependencies你可以看看https://github.com/tastejs/todomvc/blob/gh-pages/examples/scalajs-react/build.sbt:
jsDependencies ++= Seq(
"org.webjars.bower" % "react" % "15.2.1" / "react-with-addons.js" minified "react-with-addons.min.js" commonJSName "React",
"org.webjars.bower" % "react" % "15.2.1" / "react-dom.js" minified "react-dom.min.js" dependsOn "react-with-addons.js" commonJSName "ReactDOM"
)
另请注意,他们在 index.html
中添加了
<script src="generated/todomvc-jsdeps.js"></script>
确保页面上也加载了 JS 依赖项。您需要根据您的项目名称更改 *-jsdeps.js
的名称。
我想 bootstrap 使用 ScalaJS 和 React 的简单项目。
它使用 fastOptJS
构建,然后我用 Chrome 打开我的 index.html
并且在运行时出现此错误:
显然,React 的运行时在浏览器中不可用。在 documentation 中,它没有提到 React 的任何单独导入,只是 build.sbt
.
我真的不明白我做错了什么。
这是我的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>The Scala.js Tutorial</title>
</head>
<body>
<!-- Include Scala.js compiled code -->
<script type="text/javascript" src="./target/scala-2.12/hello-fastopt.js"></script>
<!-- Run tutorial.webapp.TutorialApp -->
<script type="text/javascript">
web.TutorialApp().main();
</script>
</body>
</html>
这是我的TutorialApp.scala
package web
import japgolly.scalajs.react._
import org.scalajs.dom
import scala.scalajs.js.JSApp
import scala.scalajs.js.annotation.JSExport
import japgolly.scalajs.react.ReactComponentB
import japgolly.scalajs.react.vdom.prefix_<^._
object TutorialApp extends JSApp {
@JSExport
def main(): Unit = {
println("Hello world!")
val App =
ReactComponentB[Unit]("App")
.render(_ => <.div("Hello!"))
.build
ReactDOM.render(App(), dom.document.body)
}
}
您要么全局需要它(通过 index.html
中的 <script>
标签),要么使用 webjars。
如果你想使用webjars/jsDependencies你可以看看https://github.com/tastejs/todomvc/blob/gh-pages/examples/scalajs-react/build.sbt:
jsDependencies ++= Seq(
"org.webjars.bower" % "react" % "15.2.1" / "react-with-addons.js" minified "react-with-addons.min.js" commonJSName "React",
"org.webjars.bower" % "react" % "15.2.1" / "react-dom.js" minified "react-dom.min.js" dependsOn "react-with-addons.js" commonJSName "ReactDOM"
)
另请注意,他们在 index.html
中添加了
<script src="generated/todomvc-jsdeps.js"></script>
确保页面上也加载了 JS 依赖项。您需要根据您的项目名称更改 *-jsdeps.js
的名称。