为什么 React 选择不遵守 ReactElement 的 class 模式?

Why React choose not to adhere class pattern with ReactElement?

我目前正在阅读 React 源代码。在大多数情况下,他们更喜欢 class 模式而不是工厂函数作为实例的构造函数。

直到遇到ReactElementreact/packages/react/src/ReactElement.js

评论表明他们故意选择不遵守 class 模式。

/**
 * Factory method to create a new React element. This no longer adheres to
 * the class pattern, so do not use new to call it. Also, instanceof check
 * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
 * if something is a React Element.
 *
 * @params omitted
 * ...
 */
const ReactElement = function(type, key, ref, self, source, owner, props) {
  // code omitted
}

但是根据这个评论,至少有两个明显的缺点,

  1. 用户不能使用 new ReactElement() 实例化元素(他们在其他地方使用的方式)。
  2. element instanceof ReactElement 不再有效。

我相信他们做出这个选择是有充分理由的,只是没有在评论中列出。谁能解释一下?

该函数只是 returns 一个具有 $$typeof: REACT_ELEMENT_TYPE 的普通对象。无需将其设为 class 构造函数。我认为这样做更容易被 JS 引擎优化。

User can not use new ReactElement() to instantiate element (the way they used to elsewhere).

React end-users 永远不要自己调用它。他们称 React.createElement().

element instanceof ReactElement no longer works.

作为最终用户(c.f。一个 React 内部开发人员),你是否需要这样的东西?您将检查 JSX 树的内部结构。