Estou tentando adicionar um componente do mapa React ao meu projeto, mas ocorreu um erro. Estou usando Fullstack Reagir do post como uma referência. Eu localizei onde o erro é gerado na linha 83 do google_map.js:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
Aqui está o meu componente de mapa até agora. A página carrega muito bem (sem mapa) quando eu comento as linhas 58 a 60, as últimas três linhas. edit: Fiz as alterações que @Dmitriy Nevzorov sugeriu e ainda me dá o mesmo erro.
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)
E aqui é onde esse componente do mapa é roteado no 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
fonte
fonte
export default
s, e serianew GoogleAPIComponent()
nãoGoogleAPIComponent()
?(LocationContainer)
?export default new GoogleApiComponent({ bootstrapURLKeys: MY_API_KEY })
Respostas:
Para mim, aconteceu quando eu esqueci de escrever
extends React.Component
no final. Sei que não é exatamente o que VOCÊ teve, mas espero que outros que estejam lendo esta resposta possam se beneficiar disso.fonte
import React, { Component } from 'react'; class extends Component
. Não consegui entender como isso resolveu o problema substituindoComponent
porReact.Component
. A importação importa?Para mim, foi porque esqueci de usar a
new
palavra - chave ao configurar o estado Animated.por exemplo:
fadeAnim: Animated.Value(0),
para
fadeAnim: new Animated.Value(0),
iria consertar isso.
fonte
tl; dr
Se você usa o React Router v4, verifique seu
<Route/>
componente se realmente usa ocomponent
prop para passar seu componente React baseado em classe!De maneira mais geral: se sua classe parecer correta, verifique se o código que a chama não tenta usá-la como uma função.
Explicação
Eu recebi esse erro porque estava usando o React Router v4 e acidentalmente usei o
render
prop em vezcomponent
daquele no<Route/>
componente para passar meu componente que era uma classe. Isso foi um problema, porquerender
espera (chama) uma função, enquantocomponent
é a única que funcionará nos componentes do React.Portanto, neste código:
A linha que contém o
<Route/>
componente deveria ter sido escrita assim:É uma pena que eles não verifiquem e dêem um erro utilizável para tal e fácil de detectar erros.
fonte
Aconteceu comigo porque eu costumava
PropTypes.arrayOf(SomeClass)
ao invés de
PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))
fonte
PropTypes.oneOfType([SomeClass, SomeOtherClass]).isRequired,
vez dePropTypes.oneOfType([PropTypes.instanceOf(SomeClass), PropTypes.instanceOf(SomeOtherClass)]).isRequired,
Você duplicou a
export default
declaração. O primeiro é substituído pelo segundo, que na verdade é uma função.fonte
Para mim, foi em
ComponentName.prototype
vez deComponentName.propTypes
. auto sugerido peloPhpstorm
IDE. Espero que ajude alguém.fonte
Tive o mesmo problema, ocorreu porque minha
ES6
classe de componente não estava sendo estendidaReact.Component
.fonte
Esses problemas ocorrem principalmente quando você deixa de estender o Component ao reagir:
fonte
Para mim, foi porque usei protótipo em vez de propTypes
deveria ser
fonte
para
alguém deve comentar sobre como monitorar esse erro de uma maneira muito precisa.
fonte
Parece que não há um caso único quando esse erro aparece.
Aconteceu comigo quando não declarei construtor no componente statefull.
ao invés de
fonte
Duas coisas que você pode verificar é:
fonte
Esse é um problema geral e não aparece em um único caso. Mas, o problema comum em todos os casos é que você se esquece de
import
um componente específico (não importa se é de uma biblioteca que você instalou ou de um componente personalizado que você criou):import {SomeClass} from 'some-library'
Quando você o usa mais tarde, sem importá-lo, o compilador acha que é uma função. Portanto, quebra. Este é um exemplo comum:
imports
...code...
e depois em algum lugar dentro do seu código
<Image {..some props} />
Se você esqueceu de importar o componente
<Image />
, o compilador não reclamará como ocorre com outras importações, mas será interrompido quando atingir seu código.fonte
Para mim, foi porque eu excluí acidentalmente meu
render
método!Eu tive uma classe com um
componentWillReceiveProps
método que não precisava mais, imediatamente precedendo umrender
método curto . Na minha pressa em removê-lo, removi acidentalmente todo orender
método também.Era uma PAIN para rastrear, pois eu estava recebendo erros do console apontando comentários em arquivos completamente irrelevantes como sendo a "fonte" do problema.
fonte
Eu tive um problema semelhante, estava chamando o método de renderização incorretamente
Deu um erro:
ao invés de
corrigir:
fonte
Eu tinha quando o fiz:
corretamente:
ou
fonte
Para mim, aconteceu porque eu não envolvi minha função de conexão corretamente e tentei exportar dois componentes padrão
fonte
Eu enfrentei esse erro quando importei a classe errada e me referi ao armazenamento errado ao usar o mobx no react-native.
Eu enfrentei um erro neste trecho:
Após algumas correções, como abaixo do snippet. Resolvi meu problema dessa maneira.
O que estava realmente errado, eu estava usando a classe errada em vez de
observer
usarObserver
e em vez decounterStore
usarcounter
. Resolvi meu problema dessa maneira.fonte
No arquivo
MyComponent.js
Eu coloquei alguma função relacionada a esse componente:
e depois em outro arquivo importado essa função:
Você consegue identificar o problema?
Esqueci o aparelho e importado
MyComponent
sob o nomemyFunction
!Então, a correção foi:
fonte
Eu experimentei isso ao escrever uma instrução de importação incorreta ao importar uma função, em vez de uma classe. Se
removeMaterial
é uma função em outro módulo:Certo:
Errado:
fonte
Eu recebi esse erro cometendo um pequeno erro. Meu erro foi exportar a classe como uma função em vez de como uma classe. Na parte inferior do meu arquivo de classe, eu tinha:
quando deveria ter sido:
fonte
Também deparei com isso, é possível que você tenha um erro de javascript dentro do seu componente de reação. Verifique se você está usando uma dependência, se está usando o
new
operador na classe para instanciar a nova instância. Erro lançará sethis.classInstance = Class({})
em vez disso, use
this.classInstance = new Class({})
você verá na cadeia de erros no navegador
at ReactCompositeComponentWrapper._constructComponentWithoutOwner
essa é a oferta que eu acredito.
fonte
Tente parar seu HMR e pressione
npm start
novamente para reconstruir seu projeto.Isso fez o erro desaparecer, não sei por quê.
fonte
No meu caso, eu escrevi
comment
no lugar deComponent
por enganoEu acabei de escrever isso.
Em vez disso.
não é grande coisa, mas para um iniciante como eu é realmente confuso. Espero que isso seja útil.
fonte
No meu caso, usando JSX, um componente pai estava chamando outros componentes sem o "<>"
consertar
fonte
Outro relatório aqui: não funcionou como eu exportei:
ao invés de
Observe a posição dos colchetes. Ambos estão corretos e não serão pegos por um linter ou mais bonito ou algo semelhante. Levei um tempo para encontrá-lo.
fonte
No meu caso, acidentalmente coloquei o nome do componente (
Home
) como o primeiro argumento aconnect
funcionar enquanto deveria estar no final. duh.Este - com certeza - me deu o erro:
Mas este funcionou bem:
fonte
Isso ocorreu quando acidentalmente nomeei minha
render
função incorretamente:Minha instância desse erro foi causada simplesmente porque minha classe não tinha um
render
método adequado .fonte
Na verdade, todo o problema de redux conectar. soluções:
Correto :
Erro e erro :
fonte
Para mim, foi uma importação incorreta de um redutor no rootReducer.js. Importei contêiner em vez de arquivo redutor.
Exemplo
Mas com certeza deve ser
Onde o diretório settings contém os seguintes arquivos actions.js, index.js, reducer.js.
Para verificar isso, você pode registrar os redutores arg da função assertReducerShape () no redux / es / redux.js.
fonte