scalajs Диод не может перерисовать компоненты React при изменении состояния?

РЕДАКТИРОВАТЬ: Я дурак, который использовал устаревшую версию Diode. Обновление до версии 1.0 решило проблему.

У меня настроена система Scalajs/Diode/React, и в одном разделе я столкнулся с некоторым (отсутствием) поведения, которое поставило меня в тупик. У меня сложилось впечатление, что при подключении компонента React в состояние Diode по линии, подобной следующей:

val ChangeClassButton = SelectCircuit.connect(_.selection)(p => DiodeChangeClassButton(p))

что ChangeClassButton должен перерисовывать всякий раз, когда selection обновляется в диодной схеме.

Я проверил, что диспетчеризация событий Diode и обновления состояния, кажется, работают должным образом, но компоненты React connectвъехал в selection не рендеринг, когда selection изменения. Другие компоненты, прикрепленные к другим частям состояния схемы, повторно визуализируются, как и ожидалось, при соответствующих изменениях состояния.

Вот компонент React, который должен быть перерисован:

val DiodeChangeClassButton = ReactComponentB[ModelProxy[String]]("SaveButton")
    .render_P { case proxy =>
      println("Rendering ChangeClassButton and selection is: " + proxy.value)
      if(proxy.value != "")
        <.div(
          ^.cursor := "pointer",
          ^.onClick --> proxy.dispatch(ChangeClass(proxy.value)),
          "String is: " + proxy.value
        )
      else
        <.div()
  }.build
  val ChangeClassButton = SelectCircuit.connect(_.selection)(p => DiodeChangeClassButton(p))

Вот компонент, который отправляет действие Diode, которое изменяет selection:

val DiodeClassificationBox = ReactComponentB[ModelProxy[Pot[PaperInfoShort]]]("ClassBox")
    .render_P { case proxy =>
      println("ClassificationBox is rendering")
      <.div(
        TitleBar("Classification"),
        ReadOnlyInputBar(proxy.value.get.mrPrim),
        <.div(
          ^.onMouseUp --> proxy.dispatch(HighlightChange),
          ReadOnlyInputBar((for(s <- proxy.value.get.secondaries) yield s.classCode).mkString(" "))
        )
      )
  }.build
  val ClassificationBox = SelectCircuit.connect(_.paperInfo)(p => DiodeClassificationBox(p))

А вот обработчик действий в SelectCircuit:

class HighlightHandler[M](modelRW: ModelRW[M, String]) extends ActionHandler(modelRW)
{
    override def handle =
      {
        case InitSelection =>
          updated("")
        case HighlightChange =>
          if (checkClasses(dom.window.getSelection().toString))
            updated(dom.window.getSelection().toString)
          else
            updated("")
      }
}

Я ошибаюсь в ожидаемых компонентах React, подключенных к _.selection для повторного рендеринга всякий раз, когда updated() здесь называется? Я довольно новичок в Diode и React, так что я могу неправильно понять, при каких обстоятельствах это происходит.

Спасибо за любую помощь.

0 ответов

Другие вопросы по тегам