単純化しすぎているのかもしれませんが、ソース コードは、ReactElement が ReactNode および プロパティのプロパティを持つ JavaScript オブジェクトであることを示していkey
ますref
。私は 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]
ここで重要なことは、React はかなり動的な JavaScript フレームワークであるため、scala.js にタイプ セーフを追加するために、さまざまな基本状態を処理するために多数の「類似しているが同一ではない」サブタイプが作成されることになります。たとえば、ReactComponentU
友人やReactComponent
/ ReactComponentElement
.
これまで以上にうまく文書化するためには、おそらく React 自体を文書化し、型システムでそれを上書きする必要があると思います-scala.js の観点から厳密に説明しようとしていますインターフェイスは非常に混乱する可能性があります。