我正在研究一个scalajs-react项目,我无法通过以下方式进行类型检查。相关文档为here和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组件来传递产品而不是页面,还是不能以这种方式使用?
答案 0 :(得分:2)
奇怪的是,这编译并运行没有问题;这是intellij抱怨[...]
Unfortunatley,Intellij的编译/错误报告并不完美,特别是在存在宏的情况下。虽然我不知道scalajs反应的细节,但您可以放心,如果您的代码编译并运行正常,您只会看到一个Intellij错误。
所以你能做的就是:
抱歉,我没有更好的消息。