2016-10-14 1 views
0

scalajs-react documentationを追加しようとしていますが、混乱します。ReactComponentとscalajs-reactのReactComponentElementを比較

それはhere言う:

ReactElementReactDOMElementまたはリアクトコンポーネントです。

しかし、それはhere言う:

type ReactElement = ReactComponentElement | ReactDOMElement;

本当ですか?

どのようにこの矛盾を説明できますか?

ReactComponentReactComponentElementは同じになる可能性がありますか?

私は混乱しています。誰かが私を混乱させてくれますか?

答えて

1

おそらく私は単純化していますが、ソースコードはReactElementがReactNodeとkeyrefのプロパティを持つ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インターフェースはかなり混乱する可能性があります。

関連する問題