Se mettre “Ne peut pas appeler à une classe de fonction” dans mon Réagir Projet
J'essaye d'ajouter une Réagir la carte de la composante à mon projet, mais une erreur. Je suis en utilisant Fullstack Réagir de post de blog comme une référence. J'ai traqué où l'erreur est lancée dans google_map.js ligne 83:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
Voici ma carte composant jusqu'à présent. La page se charge très bien (sans carte) quand j'en commentaire les lignes 58-60, les trois dernières lignes. edit: j'ai fait les modifications que @Dmitriy Nevzorov a suggéré et il me donne toujours la même erreur.
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)
Et c'est là où cette carte composant est routée 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'))
- Vous avez deux
export default
s, et serait-ilnew GoogleAPIComponent()
pasGoogleAPIComponent()
? - J'ai enlevé un des défauts et essayer votre suggestion. On dirait qu'il parle de Google Maps maintenant, ce qui est bon, mais avant que la page ne peut charger il jette une autre erreur cryptique: Emplacements.js:58 Uncaught TypeError: (valeur intermédiaire) n'est pas une fonction". Des idées?
- Si vous retirez le
(LocationContainer)
? - Merci, je pense que je l'ai! Bizarre, c'est comment ils ont écrit sur leur blog. Encore quelques autres erreurs de Google Maps, je vais les mettre ici: 'GoogleMap: apiKey est obsolète, utilisez bootstrapURLKeys={{clé: YOUR_API_KEY}} à la place. google_map.js:689 GoogleMap: centre ou defaultCenterproperty doit être défini google_map.js:699 GoogleMap: zoom ou defaultZoomproperty doit être défini google_map.js: 704'
- Je ne suis pas sûr que sur les autres erreurs, mais vous pouvez essayer ce pour corriger le premier:
export default new GoogleApiComponent({ bootstrapURLKeys: MY_API_KEY })
- Merci, qui a pris soin de cela. J'ai couru dans des problèmes plus avec ce repo de ne pas être en mesure de maille bien avec le projet existant et de l'API, j'ai donc mis au rebut et utilisé Réagissent-Gmap à la place. J'ai passé une journée à l'aide de ce repo et à moins d'une heure j'ai eu l'autre et en cours d'exécution. Merci encore à tous pour votre aide!
- Vérifiez que vous êtes absent
new
lorsque vous essayez de lancer une classe
Vous devez vous connecter pour publier un commentaire.
Pour moi, c'est arrivé quand j'ai oublié d'écrire
extends React.Component
à la fin.Je sais que c'est pas exactement ce que VOUS aviez, mais d'autres la lecture de cette réponse peut bénéficier de cela, je l'espère.
tl;dr
Si vous utilisez Réagir Routeur v4 vérifier votre
<Route/>
composant si vous avez, en effet, utiliser lecomponent
prop passer votre classe de Réagir composant!Plus généralement: Si votre classe semble ok, vérifier si le code qui l'appelle, il n'essayez pas de l'utiliser comme une fonction.
Explication
J'ai eu cette erreur parce que j'ai été en utilisant Réagir Routeur v4 et j'ai accidentellement utilisé le
render
prop à la place de lacomponent
un dans le<Route/>
composant de passer mon composant qui a une classe. C'était un problème, parce querender
attend (appels) une fonction, tandis quecomponent
est celui qui va travailler sur Réagir composants.Donc dans ce code:
La ligne contenant le
<Route/>
composant, doit avoir été écrit comme ceci:C'est une honte, qu'ils n'ont pas le vérifier et de donner un utilisable erreur et facile à attraper erreur.
Pour moi, c'était parce que j'ai oublié d'utiliser la
new
mot-clé lors de la configuration d'Animation de l'état.par exemple:
fadeAnim: Animated.Value(0),
à
fadeAnim: new Animated.Value(0),
serait-il fixer.
M'est arrivé parce que j'ai utilisé
PropTypes.arrayOf(SomeClass)
au lieu de
PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))
PropTypes.oneOfType([SomeClass, SomeOtherClass]).isRequired,
au lieu dePropTypes.oneOfType([PropTypes.instanceOf(SomeClass), PropTypes.instanceOf(SomeOtherClass)]).isRequired,
Que vous avez dupliqué
export default
déclaration. Le premier obtenez remplacé par le second qui est en fait une fonction.J'ai connu le même problème, il s'est produit parce que mon
ES6
classe de composant a été fait de ne pas étendreReact.Component
.Pour moi, c'était
ComponentName.prototype
au lieu deComponentName.propTypes
.auto proposé par
Phpstorm
IDE. J'espère que ça aidera quelqu'un.La plupart de ces problèmes se produisent lorsque vous manquez d'étendre Composant de réagir:
Pour moi, c'était parce que j'ai utilisé prototype au lieu de propTypes
il devrait être
à
quelqu'un doit faire des commentaires sur la façon de surveiller une telle erreur dans une manière très précise.
Regarde comme il n'y a pas de cas unique, lorsque cette erreur s'affiche.
Qui m'est arrivé lorsque je n'ai pas déclarer un constructeur dans statefull composant.
au lieu de
J'ai eu un problème similaire, j'ai été d'appeler la méthode render de manière incorrecte
A donné une erreur:
au lieu de
correct:
Je l'ai eu quand je l'ai fait :
correctement:
ou
Pour moi, c'est arrivé parce que je n'ai pas à me connecter fonctionner correctement, et essayé d'exportation par défaut, à deux composants
J'ai fait face à cette erreur lorsque j'ai importé le mauvais classe et appelé à tort magasin tout en utilisant mobx à réagir indigènes.
J'ai fait face à d'erreur dans cet extrait de code :
Après quelques corrections, comme ci-dessous un extrait. J'ai résolu mon problème comme ça.
Ce qui n'allait pas,j'ai été en utilisant le mauvais de la classe au lieu de
observer
j'ai utiliséObserver
et au lieu decounterStore
j'ai utilisécounter
. J'ai résolu mon problème comme ça.Dans le fichier
MyComponent.js
J'ai mis une fonction liée à la composante:
et puis dans un autre fichier importé en fonction:
Pouvez-vous repérer le problème?
J'ai oublié les accolades, et importés
MyComponent
sous le nommyFunction
!Donc, la solution était:
J'ai vécu cela lors de l'écriture d'une instruction d'importation de mal lors de l'importation d'une fonction, plutôt que d'une classe. Si
removeMaterial
est une fonction dans un autre module:Droite:
Mal:
Pour moi, c'était parce que j'avais accidentellement supprimé mon
render
méthode !J'ai eu une classe avec un
componentWillReceiveProps
méthode que je n'ai pas besoin de plus, précédant immédiatement un courtrender
méthode. Dans ma hâte de l'enlever, j'ai accidentellement supprimé l'ensemble de larender
méthode.C'était un DOULEUR à suivre, comme je l'ai été d'obtenir les erreurs de la console de pointer les commentaires complètement hors de propos fichiers comme étant la "source" du problème.
Essayez d'arrêter, vous HMR et frapper
npm start
de nouveau pour reconstruire votre projet.Cela ,fait l'erreur de disparaître, je ne sais pas pourquoi.
Dans mon cas, j'ai écrit
comment
en place deComponent
par erreurJe viens d'écrire cela.
Au lieu de cela.
c'est pas une grosse affaire, mais pour un débutant comme moi, c'est vraiment déroutant.
J'espère que ce sera utile.
Dans mon cas, à l'aide de JSX un composant parent a été l'appel à d'autres composants sans le "<>"
fixer
Un autre rapport ici: Il n'a pas fonctionné comme je l'ai exporté:
au lieu de
Noter la position des crochets. Les deux sont corrects et ne pas se faire attraper par un linter ou plus joli ou quelque chose de similaire. M'a fallu du temps pour le retrouver.
Dans mon cas, j'ai accidentellement mis le nom de composant (
Home
) comme premier argument deconnect
fonction alors qu'il était censé être à la fin. duh.Ce one-sûrement - m'a donné l'erreur:
Mais celui-ci a travaillé -sûrement - fin:
Cétait quand j'ai accidentellement appelé mon
render
fonction incorrecte:Mon exemple de cette erreur a été causés simplement parce que ma classe n'ont pas un bon
render
méthode.C'est une question générale, et n'apparaît pas dans un seul cas. Mais, le problème courant dans tous les cas, c'est que vous oubliez de
import
un composant spécifique (n'a pas d'importance si c'est à partir d'une bibliothèque que vous avez installé ou d'un composant que vous avez créé):import {SomeClass} from 'some-library'
Lorsque vous l'utilisez, plus tard, sans l'importer, le compilateur pense que c'est une fonction. Par conséquent, il se casse. C'est un exemple courant:
imports
...code...
et puis, quelque part à l'intérieur de votre code
<Image {..some props} />
Si vous avez oublié d'importer le composant
<Image />
puis le compilateur ne va pas se plaindre, comme il le fait pour les autres importations, mais cassera quand il atteint votre code.En fait tout le problème redux se connecter. solutions:
Corriger:
Mal & Bug:
J'ai également exécuter dans le présent, il est possible que vous ayez une erreur javascript à l'intérieur de votre réagissent composant. Assurez-vous que si vous utilisez une dépendance que vous utilisez le
new
de l'opérateur sur la classe à instancier la nouvelle instance. Erreur de jeter sithis.classInstance = Class({})
au lieu d'utiliser
this.classInstance = new Class({})
vous le verrez dans l'erreur de la chaîne dans le navigateur
at ReactCompositeComponentWrapper._constructComponentWithoutOwner
c'est le cadeau que je crois.
Pour moi c'était un faux importation d'un réducteur dans le rootReducer.js. J'ai importé le contenant plutôt que le réducteur de fichier.
Exemple
Mais assurez-vous qu'il devrait être
Où les paramètres de répertoire contient les fichiers suivants actions.js, index.js, reducer.js.
Pour le vérifier, vous pouvez vous connecter réducteurs de l'argument de la assertReducerShape() la fonction de l'redux/es/redux.js.
Si vous êtes sur Node JS et que vous voyez cette erreur dans une Classe que vous avez ajouté à l'appui d'un Concombre de test, c'est parce que le Concombre va automatiquement essayer d'exécuter tout ce qui exporte une fonction, et NodeJS en interne convertit une Classe à une fonction.
Ainsi, au lieu de cela:
ce faire:
Ensuite, lorsque vous l'importez dans les étapes de votre fichier, faites comme ceci:
De cette façon, vous n'êtes pas à l'exportation d'une fonction. Lire plus ici.
Salut dans mon cas, les solutions ne fonctionnent pas
Mon code:
index.js
Erreur apeares dans App.js après l'importation