Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs scalajs react中的ReactComponent与ReactComponentElement_Reactjs_Scalajs React - Fatal编程技术网

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接口来解释事情可能会非常混乱