All Downloads are FREE. Search and download functionalities are using the official Maven repository.

japgolly.scalajs.react.ReactDOM.scala Maven / Gradle / Ivy

The newest version!
package japgolly.scalajs.react

import japgolly.scalajs.react.util.Effect._
import japgolly.scalajs.react.util.NotAllowed
import org.scalajs.dom
import scala.scalajs.js.|

object ReactDOM {
  val raw = facade.ReactDOM
  @inline def version = facade.ReactDOM.version

  /** For mounted components, use .getDOMNode */
  def findDOMNode(componentOrElement: dom.Element | facade.React.ComponentUntyped): Option[ComponentDom.Mounted] =
    ComponentDom.findDOMNode(componentOrElement).mounted

  def flushSync[F[_], A](fa: F[A])(implicit F: Sync[F]): F[A] =
    F.delay(facade.ReactDOM.flushSync(F.toJsFn(fa)))

  def hydrate[G[_], A](element: A, container: raw.Container, callback : => G[Unit])
                      (implicit G: Dispatch[G], r: Renderable[A]): facade.React.ComponentUntyped =
    facade.ReactDOM.hydrate(r(element), container, G.dispatchFn(callback))

  /** Hydrate the container if is has children, else render into that container. */
  def hydrateOrRender[G[_], A](element: A, container: dom.Element, callback: => G[Unit])
                              (implicit G: Dispatch[G], r: Renderable[A]): facade.React.ComponentUntyped =
    if (container.hasChildNodes())
      hydrate(element, container, callback)
    else
      raw.render(r(element), container, G.dispatchFn(callback))

  // ===================================================================================================================
  // Deprecated stuff

  @deprecated("Import vdom and use ReactPortal()", "")
  def createPortal(child: NotAllowed, container: Any) = child.result

  @deprecated("Use hydrateRoot instead", "2.2.0 / React v18")
  def hydrate[A](element: A, container: raw.Container)(implicit r: Renderable[A]): facade.React.ComponentUntyped =
    facade.ReactDOM.hydrate(r(element), container)

  /** Hydrate the container if is has children, else render into that container. */
  @deprecated("Use hydrateOrRenderIntoNewRoot instead", "2.2.0 / React v18")
  def hydrateOrRender[A](element: A, container: dom.Element)(implicit r: Renderable[A]): facade.React.ComponentUntyped =
    if (container.hasChildNodes())
      hydrate(element, container)
    else
      raw.render(r(element), container)

  @deprecated("Use createRoot and root.render instead", "2.2.0 / React v18")
  def render(element  : NotAllowed,
             container: Any,
             callback : Any = null) = element.result

  @deprecated("Use root.unmount() instead", "2.2.0 / React v18")
  def unmountComponentAtNode(container: dom.Node): Boolean =
    raw.unmountComponentAtNode(container)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy