号
はElementsは仮想構成されている反応し、彼らが直接DOM要素を表すものではありません。 React Elementsには、通常のHTML DOM要素とReact Classのインスタンス化の2種類があります。最初のものは非常にシンプルでステートレスで不変なので、対応するDOM要素をレンダリングするためにのみ作成されますが(DOM要素自体と混同しないでください)、「タイプ」を持っています。これの例は<div>Foo</div>
JSXではReact.createElement("div", null, "Foo")
、JSではReact.createElement("div", null, "Foo")
です。
しかし、リアクションクラスのインスタンス化には、一般的なDOM要素を表すものではないため、「タイプ」はありません。 Reactクラスをインスタンス化するときには、それを「Component」と呼び、render
メソッド、カプセル化状態などを持つクラスの単一インスタンスとして識別します。コンポーネントの「型」を取得することは不可能です。実際のDOM要素それがレンダリングすることは、その内部状態と何かが返すことを決定するものに完全に依存しています。この例は、どこかで定義されたリアクトクラスで、次に<Foo />
またはReact.createElement(Foo)
でインスタンス化されます。
実際にコンポーネントがどのようなDOM要素をレンダリングするかを知る唯一の方法は、マウントしてレンダリングし、その動作を確認することです。コンポーネント自体に固有の「タイプ」はありません。おそらくコンポーネントをマウントし、ref
を使用して、レンダリングされているDOMエレメントを取得し、コールバック関数を使用してこの情報を親に戻します。
var Child = React.createClass({
render: function() {
return <div ref={function(el){this.props.whatElementAmI(el)}.bind(this)} >Oh My!</div>
}
});
var Parent = React.createClass({
whatElementAmI: function(el) {
console.log(el.nodeName); // "DIV"
},
render: function() {
return <div><Child whatElementAmI={this.whatElementAmI.bind(this)} /></div>
}
});
https://facebook.github.io/react/docs/glossary.html#react-elements
だから、なぜあなたはそれを必要としますか? – zerkms
@zerkms仕様に従って適切に解析するために、HTMLタグ名が必要なこのツリー解析層があります。 –