是否可以从 React 元素(从组件返回)获取 HTML 标记名称?例如:
function Foo() {
return <span>Hello</span>;
}
HTML 标记名称将为span
. 我知道你可以查看type
React 元素的属性,但是在 SFC 和普通组件之间真的很难,当组件深度相当大时更难。例如:
function Bar() {
return <Foo />;
}
应该还是回来span
。
是否可以从 React 元素(从组件返回)获取 HTML 标记名称?例如:
function Foo() {
return <span>Hello</span>;
}
HTML 标记名称将为span
. 我知道你可以查看type
React 元素的属性,但是在 SFC 和普通组件之间真的很难,当组件深度相当大时更难。例如:
function Bar() {
return <Foo />;
}
应该还是回来span
。
不。
React Elements 是一个虚拟构造,它们不直接表示 DOM 元素。有两种类型的 React 元素 - “常规” HTML DOM 元素和 React 类的实例化。第一个有“型”,因为它是非常简单的,无状态的,和不可改变的,并且只被创建以呈现其对应的DOM元素(但不与DOM元素本身混淆!)这方面的一个例子是,<div>Foo</div>
在JSX 或React.createElement("div", null, "Foo")
在 JS 中。
然而,React 类的实例没有“类型”,因为它们不代表典型的 DOM 元素。当我们实例化一个 React 类时,我们称它为“组件”,以将其标识为该类的单个实例,具有render
方法、封装状态等。无法检索组件的“类型”,因为实际的 DOM 元素是它将呈现完全取决于其内部状态以及render
方法决定返回的内容。一个例子是在某处定义的 React 类,然后用<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
是的。
import { renderToString } from 'react-dom/server';
const Span = () => <span>hello</span>
renderToString(<Span />)
// "<span>hello</span>"
然后使用正则表达式获取标签。
你可以使用 React 的Top-Level API来抓取 DOM 节点。两个警告:1)这不适用于无状态功能组件,因为您不能将 refs 放在它们上,并且 2)它仅在组件输出本机 DOM 元素时才有效,因此它在第二种情况下不起作用该组件输出另一个 React 组件。
import ReactDOM from 'react-dom';
class MyComponent extends React.Component {
render() {
return <span>Hello</span>;
}
}
class Container extends React.Component {
componentDidMount() {
var domNode = ReactDOM.findDOMNode(this._component);
console.log(domNode.tagName); // "DIV"
}
render() {
return <MyComponent ref={(c) => this._component = c} />
}
}