0
我正在開發一個scalajs-react項目,但我無法獲得以下內容來進行類型檢查。相關文件是here和here。獲取案例類而不是dynRenderR中的特質
我的頁面是:
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成分通過一個產品,而不是一個網頁,或可以在不使用這種方式?
雖然它看起來像是一個有效的類型錯誤。如果一個產品被傳遞到期望頁面的地方,那就沒問題了,反之,一個頁面不能完成產品所能做的所有事情,所以這是一個類型錯誤。所以我不明白爲什麼這是編譯。 – soote
在調用'dynamicRouteCT'的過程中,您明確指出您的參數應該被解析爲Product:'.caseClass [Product]'。這會傳播給對'dynRenderR'的調用。 – gzm0
這很有道理,謝謝! – soote