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, так что я могу неправильно понять, при каких обстоятельствах это происходит.
Спасибо за любую помощь.