Actualmente estoy leyendo el código fuente de React. En la mayoría de los casos, prefieren el patrón de clase a la función de fábrica como constructor de instancias.
Hasta que me encuentro con ReactElement : react/packages/react/src/ReactElement.js
El comentario muestra que eligen NO adherirse al patrón de clase aquí a propósito.
/** * 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 }Pero de acuerdo con este comentario, hay al menos dos deficiencias obvias,
new ReactElement() para crear una instancia del elemento (como solía hacerlo en otros lugares).element instanceof ReactElement ya no funciona.Creo que tomaron esa decisión por una buena razón, pero no aparece en el comentario. ¿Alguien puede dar alguna explicación?
La función simplemente devuelve un objeto simple con $$typeof: REACT_ELEMENT_TYPE . No hay necesidad de convertirlo en un constructor de clase. Supongo que hacer esto es más optimizable para los motores JS.
El usuario no puede usar el nuevo ReactElement() para crear una instancia del elemento (como solía hacerlo en otros lugares).
Los usuarios finales de React nunca llaman a esto por sí mismos. Llaman a React.createElement() .
element instanceof ReactElementya no funciona.
Como usuario final (como un desarrollador interno de React), ¿alguna vez ha necesitado algo así? Estaría inspeccionando las partes internas de un árbol JSX.