将上述代码重构为:
理论上是的,因为你在打电话
React.createElement
只有一次。但它是否会在应用程序中产生显著的差异是另一个问题。很可能不会。
是否会呈现和缓存指定的组件?
tl;dr(灾难恢复):
不
反应createElement创建元素
基本上返回一个组件“描述符”。此时不会实例化或呈现组件。我们可以很容易地对此进行测试(请注意,构造函数没有控制台输出):
class Foo extends React.Component {
constructor() {
super();
console.log('inside constructor');
}
render() {
return 'Foo';
}
}
const component = <Foo />;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
让我们看看组件描述符:
function Foo({bar}) {
return <span>{bar}</span>;
}
console.log(<Foo bar={42} />);
<脚本src=”https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js“></script>
<脚本src=”https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js“></script>
你可以看到,所有的
反应createElement创建元素
returns是一个对象,它保存有关要调用哪个函数、要传递的道具和一些元数据信息的信息。
实际渲染稍后进行。