web/mhtml

mhtml 에서 imitate 로 Var 값에 Rx 복사하기

wefree 2021. 10. 25. 22:07

문제

mhtml 에서 아래와 같이 x, y 가 있을 때 x 값에 y 를 복사해 보자

val x: Var[Int] = Var(1)
val y: Var[Int] = Var(2)

코드

mhtml 의 imitate 를 사용해 복사할 수 있다.

import mhtml._
import org.scalajs.dom

object MHtmlTest {
  def view(): Unit = {
    val x: Var[Int] = Var(1)
    val y: Var[Int] = Var(2)
    val z: Rx[Int]  = x.imitate(y)

    val content = <div>{x} {z}</div>
    mount(dom.document.getElementById("main_content"), content)
  }
}

화면에 x, z 값이 노출되어 2 2 를 확인할 수 있다.

그런데 z 값을 빼고 아래와 같이 작성한다면 imitate 가 적용되지 않는다.

val content = <div>{x}</div>

그래서 화면에는 1 이 노출된다.

 

설명

impure run 사용하기를 응용하면 아래처럼 작성하는 것도 가능하지 않을까?

import mhtml._
import org.scalajs.dom

object MHtmlTest {
  def view(): Unit = {
    val x: Var[Int] = Var(1)
    val y: Var[Int] = Var(2)

    y.impure.run(value => x := value)

    val content = <div>{x}</div>
    mount(dom.document.getElementById("main_content"), content)
  }
}