Reactjs scalajs react中的ReactComponent与ReactComponentElement
我想多写一些,但我很困惑 它说:Reactjs scalajs react中的ReactComponent与ReactComponentElement,reactjs,scalajs-react,Reactjs,Scalajs React,我想多写一些,但我很困惑 它说: ReactElement是reactdoelement或React组件 但它说: 类型ReactElement=ReactComponentElement | ReactDoElement 哪一个是真的 如何解释这一矛盾 ReactComponent和ReactComponentElement如何相同 我很困惑。有人可以取消我的确认吗?也许我过于简化了,但是源代码表明ReactElement是一个javascript对象,具有ReactNode和键以及ref属性
ReactElement
是reactdoelement
或React组件
但它说:
类型ReactElement=ReactComponentElement | ReactDoElement代码>
哪一个是真的
如何解释这一矛盾
ReactComponent
和ReactComponentElement
如何相同
我很困惑。有人可以取消我的确认吗?也许我过于简化了,但是源代码表明ReactElement是一个javascript对象,具有ReactNode和键以及ref
属性。我不会在vDom/scaladoc评论中放太多的股票。它们的存在是为了向用户而不是编译器提供提示。它试图说“ReactElement是ReactComponentElement和ReactDomeElement的共同基本特征”,您可以看到这是事实
/** ReactElement = ReactComponentElement | ReactDOMElement */
@js.native
trait ReactElement extends Object with ReactNode {
def key: UndefOr[String] = js.native
def ref: UndefOr[String] = js.native
}
/** A React virtual DOM element, such as 'div', 'table', etc. */
@js.native
trait ReactDOMElement extends ReactElement {
def `type`: String = js.native
def props : Object = js.native
}
/** An instance of a React component. Prefer using the subtype ReactComponentU instead. */
@js.native
trait ReactComponentElement[Props]
extends ReactElement
with HasProps[Props]
这里的关键是React是一个相当动态的javascript框架,因此为了在其周围添加类型安全性,scala.js最终创建了许多“相似但不完全相同”的子类型来处理各种底层状态。例如,ReactComponentU
和朋友以及ReactComponent
/ReactComponentElement
我认为,为了比以前更成功地记录它,您可能必须记录React本身,然后用类型系统将其覆盖——试图严格地用scala.js接口来解释事情可能会非常混乱