Próbuję dodać komponent mapy React do mojego projektu, ale pojawia się błąd. Używam posta na blogu Fullstack React jako odniesienia. Wyśledziłem, gdzie pojawia się błąd w linii google_map.js 83:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
Oto mój dotychczasowy komponent mapy. Strona ładuje się dobrze (bez mapy), kiedy komentuję wiersze 58-60, ostatnie trzy wiersze. edycja: wprowadziłem zmiany, które zasugerował @Dmitriy Nevzorov i nadal daje mi to ten sam błąd.
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)
A oto, gdzie ten komponent mapy jest kierowany w 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
źródło
źródło
export default
, a czynew GoogleAPIComponent()
nieGoogleAPIComponent()
?(LocationContainer)
?export default new GoogleApiComponent({ bootstrapURLKeys: MY_API_KEY })
Odpowiedzi:
U mnie stało się to, kiedy na końcu zapomniałem napisać
extends React.Component
. Wiem, że to nie jest dokładnie to, co TY miałeś, ale miejmy nadzieję, że inni czytający tę odpowiedź mogą na tym skorzystać.źródło
Dla mnie to dlatego, że zapomniałem użyć
new
słowa kluczowego podczas konfigurowania stanu animacji.na przykład:
fadeAnim: Animated.Value(0),
do
fadeAnim: new Animated.Value(0),
naprawi to.
źródło
tl; dr
Jeśli używasz React Router v4, sprawdź swój
<Route/>
komponent, jeśli rzeczywiście używaszcomponent
aby przekazać komponent React oparty na klasie!Mówiąc bardziej ogólnie: jeśli Twoja klasa wydaje się w porządku, sprawdź, czy kod, który ją wywołuje, nie próbuje jej użyć jako funkcji.
Wyjaśnienie
Otrzymałem ten błąd, ponieważ używałem React Router v4 i przypadkowo użyłem właściwości
render
zamiast tegocomponent
w<Route/>
komponencie, aby przekazać mój komponent, który był klasą. To był problem, ponieważrender
oczekuje (wywołuje) funkcję, podczas gdycomponent
jest tą, która będzie działać na komponentach React.Więc w tym kodzie:
Wiersz zawierający
<Route/>
komponent powinien być napisany w ten sposób:Szkoda, że nie sprawdzają tego i dają użyteczny błąd za tak łatwy do wyłapania błąd.
źródło
Przydarzyło mi się, ponieważ użyłem
PropTypes.arrayOf(SomeClass)
zamiast
PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))
źródło
PropTypes.oneOfType([SomeClass, SomeOtherClass]).isRequired,
zamiastPropTypes.oneOfType([PropTypes.instanceOf(SomeClass), PropTypes.instanceOf(SomeOtherClass)]).isRequired,
Masz zduplikowaną
export default
deklarację. Pierwsza jest zastępowana przez drugą, która w rzeczywistości jest funkcją.źródło
Dla mnie to było
ComponentName.prototype
zamiastComponentName.propTypes
. auto sugerowane przezPhpstorm
IDE. Mam nadzieję, że to komuś pomoże.źródło
Wystąpił ten sam problem, ponieważ moja
ES6
klasa komponentów nie rozszerzała sięReact.Component
.źródło
Przeważnie te problemy występują, gdy przegapisz rozszerzenie komponentu z reaguj:
źródło
Dla mnie to dlatego, że użyłem prototypu zamiast propTypes
tak powinno być
źródło
do
ktoś powinien wypowiedzieć się jak bardzo dokładnie monitorować taki błąd.
źródło
Wygląda na to, że nie ma jednego przypadku, gdy pojawia się ten błąd.
Zdarzyło mi się, gdy nie zadeklarowałem konstruktora w komponencie statefull.
zamiast
źródło
Dwie rzeczy, które możesz sprawdzić, to:
źródło
Jest to problem ogólny i nie występuje w żadnym przypadku. Jednak częstym problemem we wszystkich przypadkach jest to, że zapominasz
import
o konkretnym komponencie (nie ma znaczenia, czy pochodzi on z zainstalowanej biblioteki, czy z utworzonego niestandardowego komponentu):import {SomeClass} from 'some-library'
Kiedy używasz go później, bez importowania, kompilator uważa, że jest to funkcja. Dlatego pęka. To jest typowy przykład:
imports
...code...
a potem gdzieś w kodzie
<Image {..some props} />
Jeśli zapomniałeś zaimportować komponentu,
<Image />
kompilator nie będzie narzekał, tak jak w przypadku innych importów, ale zepsuje się, gdy dotrze do twojego kodu.źródło
Dla mnie to dlatego, że przypadkowo usunąłem swoją
render
metodę!Miałem klasę z
componentWillReceiveProps
metodą, której już nie potrzebowałem, bezpośrednio poprzedzającą krótkąrender
metodę. W pośpiechu usuwając ją, przypadkowo usunąłem również całąrender
metodę.To był BÓL do wyśledzenia, ponieważ otrzymywałem błędy konsoli wskazujące na komentarze w zupełnie nieistotnych plikach jako „źródło” problemu.
źródło
Miałem podobny problem, ponieważ nieprawidłowo wywoływałem metodę renderowania
Wystąpił błąd:
zamiast
poprawny:
źródło
Miałem to, kiedy to zrobiłem:
prawidłowo:
lub
źródło
U mnie stało się tak, ponieważ nie opakowałem poprawnie funkcji connect i próbowałem wyeksportować domyślne dwa komponenty
źródło
Napotkałem ten błąd, gdy zaimportowałem niewłaściwą klasę i odniosłem się do niewłaściwego sklepu podczas korzystania z mobx w react-native.
Wystąpił błąd w tym fragmencie:
Po kilku poprawkach jak poniżej fragment. W ten sposób rozwiązałem swój problem.
Co było właściwie nie tak, zamiast tego
observer
użyłem złej klasy ,Observer
a zamiast tegocounterStore
użyłemcounter
. W ten sposób rozwiązałem swój problem.źródło
W pliku
MyComponent.js
Dodałem funkcję związaną z tym komponentem:
a następnie w innym pliku zaimportowano tę funkcję:
Czy potrafisz dostrzec problem?
Zapomniałem o szelkach kręconych i importowałem je
MyComponent
pod nazwąmyFunction
!Tak więc poprawka była taka:
źródło
Doświadczyłem tego, pisząc instrukcję importu nieprawidłowo podczas importowania funkcji, a nie klasy. Jeśli
removeMaterial
jest funkcją w innym module:Dobrze:
Źle:
źródło
Otrzymałem ten błąd, popełniając mały błąd. Mój błąd polegał na wyeksportowaniu klasy jako funkcji, a nie jako klasy. Na dole mojego pliku klasy miałem:
kiedy powinno być:
źródło
Też napotkałem to, możliwe, że masz błąd javascript w komponencie reagowania. Upewnij się, że jeśli używasz zależności, używasz
new
operatora na klasie do utworzenia wystąpienia nowej instancji. Błąd wyrzuci ifthis.classInstance = Class({})
zamiast tego użyj
this.classInstance = new Class({})
zobaczysz w łańcuchu błędów w przeglądarce
at ReactCompositeComponentWrapper._constructComponentWithoutOwner
to jest gratka, którą wierzę.
źródło
Spróbuj zatrzymać HMR i uderzyć
npm start
ponownie, aby odbudować swój projekt.To spowodowało zniknięcie błędu, nie wiem dlaczego.
źródło
W moim przypadku napisałem
comment
w miejsceComponent
przez pomyłkęWłaśnie to napisałem.
Zamiast tego.
to nic wielkiego, ale dla początkującego takiego jak ja jest to naprawdę zagmatwane. Mam nadzieję, że to będzie pomocne.
źródło
W moim przypadku użycie JSX komponentu nadrzędnego wywoływało inne komponenty bez „<>”
naprawić
źródło
Kolejny raport tutaj: Nie zadziałał, gdy wyeksportowałem:
zamiast
Zwróć uwagę na położenie nawiasów. Obie są poprawne i nie zostaną złapane ani przez linter, ani przez ładniejszą, ani przez coś podobnego. Zajęło mi trochę czasu, zanim to wyśledziłem.
źródło
W moim przypadku przypadkowo umieściłem nazwę komponentu (
Home
) jako pierwszy argumentconnect
funkcji, podczas gdy miała znajdować się na końcu. duh.Ten - na pewno - dał mi błąd:
Ale ten działał - z pewnością - dobrze:
źródło
Zdarzyło się to, gdy przypadkowo nazwałem swoją
render
funkcję nieprawidłowo:Moje wystąpienie tego błędu było po prostu spowodowane tym, że moja klasa nie miała odpowiedniej
render
metody.źródło
Właściwie cały problem redux connect. rozwiązania:
Poprawnie :
Błędne & błąd :
źródło
Dla mnie był to zły import reduktora w rootReducer.js. Zaimportowałem kontener zamiast pliku reduktora.
Przykład
Ale na pewno tak powinno być
Gdzie katalog ustawień zawiera następujące pliki action.js, index.js, reduktor.js.
Aby to sprawdzić, możesz zarejestrować argument redukujący funkcji assertReducerShape () z redux / es / redux.js.
źródło