scalajs-reactjs
Develop React applications with Scala.
It is compatible with Scala 2.13+, Scala.js 1.1+ and with React.js v17+.
Optionally include react-router and react-redux facades, too.
Quick Look
import io.github.shogowada.scalajs.reactjs.VirtualDOM._
import io.github.shogowada.scalajs.reactjs.{React, ReactDOM}
import org.scalajs.dom
case class WrappedProps(name: String)
val reactClass = React.createClass[WrappedProps, Unit](
(self) => <.div(^.id := "hello-world")(s"Hello, ${self.props.wrapped.name}!")
)
val mountNode = dom.document.getElementById("mount-node")
ReactDOM.render(<(reactClass)(^.wrapped := WrappedProps("World"))(), mountNode)You can also directly render without creating a React class:
import io.github.shogowada.scalajs.reactjs.ReactDOM
import io.github.shogowada.scalajs.reactjs.VirtualDOM._
import org.scalajs.dom
val mountNode = dom.document.getElementById("mount-node")
ReactDOM.render(<.div(^.id := "hello-world")("Hello, World!"), mountNode)How to Use
- Apply scalajs-bundler plugin.
- Depend on the libraries.
libraryDependencies ++= Seq( "org.scommons.shogowada" %%% "scalajs-reactjs-core" % "0.17.1", // For react facade "org.scommons.shogowada" %%% "scalajs-reactjs-dom" % "0.17.1", // For react-dom facade "org.scommons.shogowada" %%% "scalajs-reactjs-router-dom" % "0.17.1", // Optional. For react-router-dom facade "org.scommons.shogowada" %%% "scalajs-reactjs-redux" % "0.17.1", // Optional. For react-redux facade "org.scommons.shogowada" %%% "scalajs-reactjs-redux-devtools" % "0.17.1" // Optional. For redux-devtools facade )
Examples
- Basics
- TODO App
- Router
- Redux
- Redux Middleware
- Redux DevTools
- I don't like
<and^. How can I change them?
Reusable Components
- ReactCrop: Crop an image