react props practicas mejores funciones español entre ejemplos conceptos comunicacion componentes reactjs ecmascript-6

reactjs - props - react conceptos



reactjs dando error Tipo de error no detectado: la súper expresión debe ser nula o una función, no indefinida (30)

Aquí hay una respuesta:

import React, { Component } from ''react''; // NOT ''react-dom''

Estoy usando reactjs.

Cuando ejecuto el código debajo del navegador dice:

TypeError no capturado: la súper expresión debe ser nula o una función, no indefinida

Cualquier sugerencia sobre lo que está mal sería apreciada.

Primero, la línea utilizada para compilar el código:

browserify -t reactify -t babelify examples/temp.jsx -o examples/public/app.js

Y el codigo:

var React = require(''react''); class HelloMessage extends React.Component { render() { return <div>Hello </div>; } }

ACTUALIZACIÓN: Después de quemarme en el fuego del infierno durante tres días con este problema, descubrí que no estaba usando la última versión de react.

Instalar globalmente:

sudo npm install -g [email protected]

instalar localmente:

npm install [email protected]

asegúrese de que el navegador también esté usando la versión correcta:

<script type="text/javascript" src="react-0.13.2.js"></script>

Espero que esto salve a alguien más tres días de vida preciosa.


Cambie import React from ''react-dom para import React, {Component} from ''react''
Y cambiar la class Classname extends React.Component a la class Classname extends Component
Si está utilizando la última versión de React (16.8.6 a partir de ahora) .


En mi caso estaba usando:

class Root extends React.Component() { // THIS IS WORNG // After React.Component () <- WRONG!! }

que estaba mal pero correcto es:

class Root extends React.Component { // THIS IS CORRECT // That -> ''()'' after React.Component was typo }

También asegúrese de que haya
React.Component
NO
ˣ React.component o React.Components


En mi caso, con react-native, el error fue que tuve

import React, { AppRegistry, Component, Text, View, TouchableHighlight } from ''react-native'';

en lugar de

import React, { Component } from ''react''; import { AppRegistry, StyleSheet, Text, View, Image, AsyncStorage } from ''react-native'';


En mi caso, fue React.Element change a React.Component lo que solucionó este error.


En mi caso, solucioné este error cambiando export default class yourComponent extends React.Component() {} para export default class yourComponent extends React.Component {} . Sí, eliminar el paréntesis () solucionó el error.


Esto funcionó para mí:

import React, {Component} from ''react'';


Esto significa que desea algo de subclase, que debería ser Class , pero undefined está undefined . Las razones pueden ser:

  • error tipográfico en la Class extends ... , por lo que se extiende variable indefinida
  • error tipográfico en import ... from , por lo que importa undefined desde el módulo
  • el módulo al que se hace referencia no contiene el valor, desea importar (por ejemplo, módulo obsoleto - caso con React), por lo que importa un valor no existente ( undefined )
  • error tipográfico en la declaración de export ... módulo referenciado, por lo que exporta una variable indefinida
  • el módulo referenciado no tiene ninguna declaración de export , por lo que exporta solo undefined

Esto también puede suceder si ha utilizado require lugar de import dentro de su código.


Experimenté este error al importar componentes como:

import React, { Components } from ''react'';

en lugar de

import React, { Component } from ''react'';


Experimenté esto cuando me faltaba una declaración de exportación para la clase JSX.

Por ejemplo:

class MyComponent extends React.Component { } export default MyComponent // <- add me


He escrito

React.component

en lugar de React.Component Ese fue mi problema)) y React.Component buscando esto durante más de media hora.


He visto este error cuando tienes una dependencia circular.

export default class MyComponent extends React.Component() {} ^^ REMOVE


Mire si tiene un error tipográfico en su importación o en su generación de clase, podría ser simplemente eso.


No es correcto para esta respuesta, pero para otros con el mismo error, mi error ridículamente tonto podría ayudar.

Estúpidamente, mi problema era usar la notación de función al incluir () después del nombre de la clase .

Asegúrese de que su sintaxis sea correcta. Y ha importado y exportado cualquier componente / módulo externo con los nombres y rutas correctos.

Esta plantilla debería funcionar bien si tiene instalada una versión más reciente de react:

import React, { Component } from ''react'' class ExampleClass extends Component { render(){ return( <div> </div> ) } } export default ExampleClass


Obtuve esto cuando tuve un error tipográfico en mi importación:

import {Comonent} from ''react'';


Otra ocurrencia con Expo / react-native con mecanografiado: a veces, cuando está volviendo a compilar los archivos mecanografiados en el medio de un paquete, el empaquetador de reacción se pierde.

La única forma de hacer que mi aplicación vuelva a ejecutarse es borrar el caché; si está utilizando la expo cli, puede presionar R (es una MAYÚSCULA ''R''); Esto reconstruirá todo el paquete. A veces, cambiar al modo de desarrollo también ayuda ...


Para aquellos que usan react-native :

import React, { Component, StyleSheet, } from ''react-native'';

puede producir este error

Mientras que la referencia directa react es la forma más estable de hacerlo:

import React, { Component } from ''react''; import { StyleSheet } from ''react-native'';


Para cualquier otra persona, eso puede desarrollar este problema. También puede verificar que el método del component en React.Component esté en mayúscula. Tuve el mismo problema y lo que lo causó fue que escribí:

class Main extends React.component { //class definition }

Lo cambié a

class Main extends React.Component { //class definition }

y todo funcionó bien


Puede haber un paquete de terceros causando esto. En nuestro caso fue react-dazzle . Tenemos configuraciones similares a las de @steine ​​( vea esta respuesta más arriba ).

Para encontrar el paquete problemático, ejecuté la compilación del paquete web localmente con el modo de producción y, por lo tanto, pude encontrar el paquete problemático en el seguimiento de la pila. Así que para nosotros this proporcionó la solución y pude mantener la uglificación.


Si recibe este error y está usando Browserify y browserify-shim (como en una tarea de Grunt), es posible que haya experimentado un momento tonto como el que tuve cuando le dijiste involuntariamente a browserify-shim que tratara a React como parte del espacio de nombres global ( por ejemplo, cargado desde un CDN).

Si desea que Browserify incluya React como parte de la transformación, y no un archivo separado, asegúrese de que la línea "react": "global:React" no aparezca en la "browserify-shim" en su archivo packages.json .


También me sucedió cuando usé esto:

class App extends React.Component(){ }

En lugar del correcto:

class App extends React.Component{ }

Aviso: - () en el primero, que es la causa principal de este problema


También puede recibir esto si está intentando ejecutar React.Component con un error () en su definición de clase.

class A extends B {} class B extends C {} class C extends A {}

Lo que a veces logro hacer cuando estoy convirtiendo de un componente funcional sin estado a una clase.


También puede ser causado por un error tipográfico, por lo que en lugar de Component con C mayúscula, tiene un component con c inferior, por ejemplo:

React.component //wrong. React.Component //correct.

Nota: La fuente de este error puede deberse a que hay React y creemos que automáticamente lo que viene a continuación debería ser un método o propiedad de reacción que comience con una letra minúscula, pero de hecho es otra Clase ( Component ) que debería comenzar con una mayúscula Carta de caso.


Tengo el mismo problema, solo cambie de Navigator a {Navigator}

import Navigator from ''react-native-deprecated-custom-components'' // to import {Navigator} from ''react-native-deprecated-custom-components''


Usando Babel (5.8) obtengo el mismo error si intento usar la expresión export default en combinación con alguna otra export :

export const foo = "foo" export const bar = "bar" export default function baz() {}


Verifique que las clases que extienda realmente existan, pocos métodos React se deprecian, también podría ser un error ''React.Components'' lugar de ''React.Component''

¡¡Buena suerte!!


Voy a aportar otra posible solución, una que funcionó para mí. Estaba usando el índice de conveniencia para recopilar todos los componentes en un archivo.

No creo que al momento de escribir esto sea respaldado oficialmente por Babel, y arroje el mecanografiado a un giro, sin embargo, lo he visto utilizado en muchos proyectos y definitivamente es conveniente.

Sin embargo, cuando se usa en combinación con la herencia, parece arrojar el error presentado en la pregunta anterior.

Una solución simple es que los módulos que actúan como padres deben importarse directamente en lugar de a través de un archivo de índice de conveniencia.

./src/components/index.js

export Com1 from ''./com-1/Com1''; export Com2 from ''./com-2/Com2''; export Com3 from ''./com-3/Com3''; export Parent1 from ''./parent/Parent1'';

./src/components/com-1/Com1.js

import { Com2, Com3 } from ''../index''; // This works fine class Com1 { render() { return ( <div> <Com2 {...things} /> <Com3 {...things} /> </div> ); } }

./src/components/com-3/Com3.js

import { Parent } from ''../index''; // This does _not_ work class Com3 extends Parent { }

./src/components/com-3/Com3.js

import Parent from ''../parent/Parent''; // This does work class Com3 extends Parent { }


Nombres de clase

En primer lugar, si está seguro de que se está extendiendo desde la clase correctamente nombrada, por ejemplo, React.Component , no React.component o React.createComponent, es posible que deba actualizar su versión React. Vea las respuestas a continuación para obtener más información sobre las clases para ampliar.

Actualizar Reaccionar

React solo ha admitido clases de estilo ES6 desde la versión 0.13.0 (consulte su publicación de blog oficial en la introducción de soporte here .

Antes de eso, cuando se usa:

class HelloMessage extends React.Component

intentaba usar palabras clave ES6 (se extends ) a una subclase de una clase que no se definió usando la class ES6. Probablemente por esto te encontrabas con un comportamiento extraño con super definiciones, etc.

Entonces, sí, TL; DR - actualizar a React v0.13.x.

Dependencias circulares

Esto también puede ocurrir si tiene una estructura de importación circular. Un módulo importa otro y viceversa. En este caso, solo necesita refactorizar su código para evitarlo. Más información


Webpack 4 Trozos y Hashes con Uglificación por TerserPlugin

Esto puede ocurrir cuando Webpack utiliza fragmentos y hashes con minificación y unglification a través de TerserPlugin (actualmente en la versión 1.2.3). En mi caso, el error se redujo a la uglificación por el complemento Terser de mis vendors.[contenthash].js paquete que contiene mis vendors.[contenthash].js . Todo funcionaba cuando no se usaban hashes.

La solución fue excluir el paquete en las opciones de uglification:

optimization: { minimizer: [ new TerserPlugin({ chunkFilter: (chunk) => { // Exclude uglification for the `vendors` chunk if (chunk.name === ''vendors'') { return false; } return true; }, }), ], }

Más información