我正在包装Bootstrap React以在Japgolly ScalaJS React中使用,并提出了以下内容:
case class NavItem(
onClick: UndefOr[js.Function1[ReactEvent, Boolean]] = undefined,
// ...
) { /* ... create method here */ }
object NavItem {
def toPage[T](page: T, children: ReactNode*)(implicit ctl: RouterCtl[_ >: T]) = {
val clickFunction: js.Function1[ReactEvent, Boolean] = { e: ReactEvent =>
e.preventDefault()
ctl.set(page).runNow()
true
}
NavItem(
key = page.toString,
href = ctl.pathFor(page).value,
onClick = clickFunction
).create(
children
)
}
}
这行得通,但我觉得比它可能更复杂。
我的第一个想法是onClick : UndefOr[ReactEvent => Callback]
改用它,这似乎更符合 japgolly ScalaJS React 通常的方法,所以我尝试了:
val clickEvent: ReactEvent => Callback = e => {
e.preventDefault()
ctl.set(page)
}
这会编译,但即使调试显示调用了回调,页面也不会切换。为什么在这种情况下页面从不切换?
有关如何正确执行 NavItem 的任何建议,该 NavItem 在单击链接时显示链接,但使用路由器实际路由?惯用的方法是什么?