おそらく私は単純化していますが、ソースコードはReactElementがReactNodeとkey
とref
のプロパティを持つjavascriptオブジェクトであることを示しています。私はvDom/scaladocコメントに多くの株式を置いてはいけません。コンパイラではなく、ユーザにヒントを提供するために存在します。 「ReactElementは、ReactComponentElementと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]
その周りに型の安全性を追加するために処理するために作成する「類似であるが同一ではない」のサブタイプの数であるが終わるscala.jsので、ここで重要なことは、AAかなり動的なJavaScriptのフレームワークで反応することがあります様々な根本的な状態。たとえば、ReactComponentU
と友人とReactComponent
/ReactComponentElement
です。
私はそれを既に文書化しているよりも、成功していると思うかもしれませんが、おそらくReact自体を書かなければならないでしょうし、タイプシステムで書いておかなければならないでしょう。 scala.jsインターフェースはかなり混乱する可能性があります。