为什么 React 选择不遵守 ReactElement 的 class 模式?
Why React choose not to adhere class pattern with ReactElement?
我目前正在阅读 React 源代码。在大多数情况下,他们更喜欢 class 模式而不是工厂函数作为实例的构造函数。
直到遇到ReactElement
:react/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
}
但是根据这个评论,至少有两个明显的缺点,
- 用户不能使用
new ReactElement()
实例化元素(他们在其他地方使用的方式)。
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 树的内部结构。
我目前正在阅读 React 源代码。在大多数情况下,他们更喜欢 class 模式而不是工厂函数作为实例的构造函数。
直到遇到ReactElement
:react/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
}
但是根据这个评论,至少有两个明显的缺点,
- 用户不能使用
new ReactElement()
实例化元素(他们在其他地方使用的方式)。 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 树的内部结构。