scalajs-react 中的 ReactComponent 与 ReactComponentElement
ReactComponent vs ReactComponentElement in scalajs-react
我想写一些额外的东西scalajs-react documentation,但我很困惑。
它说 here :
A ReactElement
is a ReactDOMElement
or a React component.
但是它说 here:
type ReactElement = ReactComponentElement | ReactDOMElement;
哪一个是正确的?
如何解释这一矛盾?
ReactComponent
和ReactComponentElement
怎么可能一样呢?
我很困惑。有人可以帮我解惑吗?
也许我过于简化了,但源代码表明 ReactElement 是一个 javascript 对象,具有 ReactNode 的属性以及 key
和 ref
属性。我不会在 vDom / scaladoc 评论中放那么多股票。它们的存在是为了向用户而不是编译器提供提示。它试图说"ReactElement is the common base trait to ReactComponentElement and ReactDomElement",你可以看到它确实是真的。
/** 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 最终会有许多 "similar but not identical" 子类型create 来处理各种底层状态。例如,ReactComponentU
和朋友以及 ReactComponent
/ReactComponentElement
。
我认为为了比现在更成功地记录它(更多?),您可能必须记录 React 本身,然后用类型系统覆盖它——尝试严格地用术语解释事情scala.js 界面可能相当混乱。
我想写一些额外的东西scalajs-react documentation,但我很困惑。
它说 here :
A
ReactElement
is aReactDOMElement
or a React component.
但是它说 here:
type ReactElement = ReactComponentElement | ReactDOMElement;
哪一个是正确的?
如何解释这一矛盾?
ReactComponent
和ReactComponentElement
怎么可能一样呢?
我很困惑。有人可以帮我解惑吗?
也许我过于简化了,但源代码表明 ReactElement 是一个 javascript 对象,具有 ReactNode 的属性以及 key
和 ref
属性。我不会在 vDom / scaladoc 评论中放那么多股票。它们的存在是为了向用户而不是编译器提供提示。它试图说"ReactElement is the common base trait to ReactComponentElement and ReactDomElement",你可以看到它确实是真的。
/** 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 最终会有许多 "similar but not identical" 子类型create 来处理各种底层状态。例如,ReactComponentU
和朋友以及 ReactComponent
/ReactComponentElement
。
我认为为了比现在更成功地记录它(更多?),您可能必须记录 React 本身,然后用类型系统覆盖它——尝试严格地用术语解释事情scala.js 界面可能相当混乱。