Estoy tratando de agregar un componente de mapa React a mi proyecto pero me encuentro con un error. Estoy usando la publicación de blog de Fullstack React como referencia. Rastreé dónde se arroja el error en google_map.js línea 83:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
Aquí está mi componente de mapa hasta ahora. La página se carga muy bien (sin un mapa) cuando comento las líneas 58-60, las últimas tres líneas. editar: hice los cambios que @Dmitriy Nevzorov sugirió y todavía me da el mismo error.
import React from 'react'
import GoogleApiComponent from 'google-map-react'
export class LocationsContainer extends React.Component {
constructor() {
super()
}
render() {
const style = {
width: '100vw',
height: '100vh'
}
return (
<div style={style}>
<Map google={this.props.google} />
</div>
)
}
}
export class Map extends React.Component {
componentDidUpdate(prevProps, prevState){
if (prevProps.google !== this.props.google){
this.loadMap();
}
}
componentDidMount(){
this.loadMap();
}
loadMap(){
if (this.props && this.props.google){
const {google} = this.props;
const maps = google.maps;
const mapRef = this.refs.map;
const node = ReactDOM.findDOMNode(mapRef);
let zoom = 14;
let lat = 37.774929
let lng = 122.419416
const center = new maps.LatLng(lat, lng);
const mapConfig = Object.assign({}, {
center: center,
zoom: zoom
})
this.map = new maps.Map(node, mapConfig)
}
}
render() {
return (
<div ref='map'>
Loading map...
</div>
)
}
}
export default GoogleApiComponent({
apiKey: MY_API_KEY
})(LocationsContainer)
Y aquí es donde este componente del mapa se enruta en main.js:
import {render} from 'react-dom';
import React from 'react';
import Artists from './components/Artists'
import { Router, Route, Link, browserHistory } from 'react-router'
import Home from './components/HomePage'
import Gallery from './components/ArtGallery'
import ArtistPage from './components/ArtistPage'
import FavsPage from './components/FavsPage'
import LocationsContainer from './components/Locations'
//Create the route configuration
render((
<Router history={browserHistory}>
<Route path="/" component={Home} />
<Route path="locations" component={LocationsContainer} />
<Route path="artists" component={Artists} />
<Route path="gallery" component={Gallery} />
<Route path="favorites" component={FavsPage} />
<Route path=":artistName" component={ArtistPage} />
</Router>
), document.getElementById('app'))
javascript
google-maps
reactjs
ecmascript-6
react-router
Mike Fleming
fuente
fuente
export default
s, ¿y no seríanew GoogleAPIComponent()
asíGoogleAPIComponent()
?(LocationContainer)
?export default new GoogleApiComponent({ bootstrapURLKeys: MY_API_KEY })
Respuestas:
Para mí sucedió cuando olvidé escribir
extends React.Component
al final. Sé que no es exactamente lo que USTED tenía, pero espero que otros que lean esta respuesta puedan beneficiarse de esto.fuente
import React, { Component } from 'react'; class extends Component
. No pude entender cómo resolvió el problema reemplazandoComponent
conReact.Component
. ¿Importa la importación?Para mí fue porque olvidé usar la
new
palabra clave al configurar el estado animado.p.ej:
fadeAnim: Animated.Value(0),
a
fadeAnim: new Animated.Value(0),
Lo arreglaría.
fuente
tl; dr
Si usa React Router v4, verifique su
<Route/>
componente si realmente usa elcomponent
accesorio para pasar su componente React basado en su clase.En términos más generales: si su clase parece estar bien, verifique si el código que la llama no intenta usarla como una función.
Explicación
Recibí este error porque estaba usando React Router v4 y accidentalmente usé el
render
accesorio en lugar delcomponent
que estaba en el<Route/>
componente para pasar mi componente que era una clase. Este fue un problema, porquerender
espera (llama) una función, mientras quecomponent
es la que funcionará en los componentes React.Entonces en este código:
La línea que contiene el
<Route/>
componente, debería haberse escrito así:Es una pena que no lo verifiquen y den un error útil para un error tan fácil de detectar.
fuente
Me pasó porque solía
PropTypes.arrayOf(SomeClass)
en vez de
PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))
fuente
PropTypes.oneOfType([SomeClass, SomeOtherClass]).isRequired,
lugar dePropTypes.oneOfType([PropTypes.instanceOf(SomeClass), PropTypes.instanceOf(SomeOtherClass)]).isRequired,
Has duplicado la
export default
declaración. El primero se anula por el segundo, que en realidad es una función.fuente
Para mí, fue en
ComponentName.prototype
lugar deComponentName.propTypes
. auto sugerido porPhpstorm
IDE. Espero que ayude a alguien.fuente
Experimenté el mismo problema, ocurrió porque mi
ES6
clase de componente no se extendíaReact.Component
.fuente
En su mayoría, estos problemas se producen cuando se omite extender Componente desde la reacción:
fuente
Para mí fue porque usé prototipos en lugar de propTypes
deberia ser
fuente
a
alguien debería comentar cómo monitorear dicho error de una manera muy precisa.
fuente
Parece que no hay un solo caso cuando aparece este error.
Me sucedió cuando no declaró el constructor en el componente statefull.
en vez de
fuente
Dos cosas que puedes verificar es,
fuente
Este es un problema general y no aparece en un solo caso. Pero, el problema común en todos los casos es que se olvida de
import
un componente específico (no importa si es de una biblioteca que instaló o de un componente personalizado que creó):import {SomeClass} from 'some-library'
Cuando lo usa más tarde, sin importarlo, el compilador cree que es una función. Por lo tanto, se rompe. Este es un ejemplo común:
imports
...code...
y luego en algún lugar dentro de tu código
<Image {..some props} />
Si olvidó importar el componente
<Image />
, el compilador no se quejará como lo hace para otras importaciones, pero se interrumpirá cuando llegue a su código.fuente
¡Para mí, fue porque accidentalmente eliminé mi
render
método!Tuve una clase con un
componentWillReceiveProps
método que ya no necesitaba, inmediatamente antes de unrender
método corto . En mi apuro por eliminarlo, también eliminé accidentalmente todo elrender
método.Este fue un DOLOR para rastrear, ya que recibía errores de consola que apuntaban a comentarios en archivos completamente irrelevantes como la "fuente" del problema.
fuente
Tuve un problema similar, estaba llamando al método de renderizado incorrectamente
Dio un error:
en vez de
correcto:
fuente
Lo tuve cuando lo hice:
correctamente:
o
fuente
Para mí sucedió porque no envolví mi función de conexión correctamente e intenté exportar dos componentes predeterminados
fuente
Enfrenté este error cuando importé la clase incorrecta y me referí a la tienda incorrecta mientras usaba mobx en react-native.
Me enfrenté a un error en este fragmento:
Después de algunas correcciones como el fragmento de abajo. Resolví mi problema de esta manera.
Lo que realmente estaba mal, estaba usando la clase incorrecta en lugar de lo
observer
que uséObserver
y en lugar de locounterStore
que usécounter
. Resolví mi problema de esta manera.fuente
En archivo
MyComponent.js
Pongo alguna función relacionada con ese componente:
y luego en otro archivo importado esa función:
¿Puedes detectar el problema?
¡Olvidé las llaves, e importé
MyComponent
bajo nombremyFunction
!Entonces, la solución fue:
fuente
Experimenté esto cuando escribí una declaración de importación incorrecta al importar una función, en lugar de una clase. Si
removeMaterial
es una función en otro módulo:Correcto:
Incorrecto:
fuente
Recibí este error cometiendo un pequeño error. Mi error fue exportar la clase como una función en lugar de como una clase. Al final de mi archivo de clase tenía:
cuando debería haber sido:
fuente
También me he encontrado con esto, es posible que tenga un error de JavaScript dentro de su componente de reacción. Asegúrese de que si está utilizando una dependencia, está utilizando el
new
operador de la clase para crear una instancia de la nueva instancia. Se lanzará un error sithis.classInstance = Class({})
en su lugar use
this.classInstance = new Class({})
verá en la cadena de error en el navegador
at ReactCompositeComponentWrapper._constructComponentWithoutOwner
ese es el sorteo, creo.
fuente
Intenta detener tu HMR y presiona
npm start
nuevamente para reconstruir tu proyecto.Esto, hizo que el error desapareciera, no sé por qué.
fuente
En mi caso escribí
comment
en lugar deComponent
por errorAcabo de escribir esto.
En lugar de esto.
no es gran cosa, pero para un principiante como yo es realmente confuso. Espero que esto sea útil.
fuente
En mi caso, usando JSX un componente padre estaba llamando a otros componentes sin el "<>"
reparar
fuente
Otro informe aquí: no funcionó como exporté:
en vez de
Tenga en cuenta la posición de los soportes. Ambos son correctos y no serán atrapados por un linter o más bonito o algo similar. Me llevó un tiempo localizarlo.
fuente
En mi caso, accidentalmente puse el nombre del componente (
Home
) como primer argumento paraconnect
funcionar mientras se suponía que debía estar al final. duhEste, seguramente, me dio el error:
Pero este funcionó, seguramente, bien:
fuente
Esto ocurrió cuando accidentalmente puse un nombre
render
incorrecto a mi función:Mi instancia de este error simplemente fue causada porque mi clase no tenía un
render
método adecuado .fuente
En realidad todo el problema redux connect. soluciones:
Correcto :
Mal y error :
fuente
Para mí fue una importación incorrecta de un reductor en rootReducer.js. Importé el contenedor en lugar del archivo reductor.
Ejemplo
Pero seguro que debería ser
Donde el directorio de configuración contiene los siguientes archivos actions.js, index.js, reducer.js.
Para verificarlo, puede registrar los reductores arg de la función afirmarReducerShape () desde redux / es / redux.js.
fuente