获取 case class 而不是 dynRenderR 中的特征

Getting the case class instead of the trait in dynRenderR

我正在做一个 scalajs-react 项目,我无法得到以下类型检查。相关文档是here and here.


我的页面是:

sealed trait Pages
case class Product(id: String) extends Pages

我的路线定义为:

dynamicRouteCT("#product" / string("[a-zA-Z0-9]+")
   .caseClass[Product]) ~> dynRenderR((page, ctl) => ProductPage(page, ctl))

问题是 dynRenderR 组件返回类型 Pages 的值,而我确实需要类型 Product 的值才能访问 ID 属性,这Pages 特质没有。

产品页面:

case class Props(routeData: Product, ctl: RouterCtl[Pages])

class Backend($: BackendScope[Props, Unit]) {
    def render(props: Props) = <.div("Product view " + props.routeData.id)
}

def apply(product: Product, ctl: RouterCtl[Pages]): ReactElement =
    component(Props(product, ctl))

private val component = ReactComponentB[Props]("Product")
    .renderBackend[Backend]
    .build

奇怪,这样编译运行没问题;是 intellij 抱怨:

Type mismatch, expected: Product, actual Pages

如何修改或正确使用 dynRender 组件来传递产品而不是页面,或者不能以这种方式使用它?

Strangely, this compiles and runs no problem; it is intellij which is complaining [...]

不幸的是,Intellij 的 compilation/error 报告并不完美,尤其是在存在宏的情况下。虽然我不知道 scalajs-react 的细节,但您可以放心,如果您的代码编译并运行良好,您只会看到一个 Intellij 错误。

所以你所能做的就是:

  • 忍受它或者
  • 提交错误。

抱歉,我没有更好的消息。