Я пытаюсь добавить в свой проект компонент карты React, но получаю ошибку. Я использую сообщение в блоге Fullstack React как ссылку. Я отследил, где возникает ошибка в строке 83 google_map.js:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
Вот мой компонент карты. Страница загружается нормально (без карты), когда я закомментировал строки 58-60, последние три строки. edit: я внес изменения, которые предложил @Dmitriy Nevzorov, и он по-прежнему дает мне ту же ошибку.
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)
И вот где этот компонент карты маршрутизируется в 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
Майк Флеминг
источник
источник
export default
, а не будетnew GoogleAPIComponent()
лиGoogleAPIComponent()
?(LocationContainer)
?export default new GoogleApiComponent({ bootstrapURLKeys: MY_API_KEY })
Ответы:
Для меня это случилось, когда я забыл написать
extends React.Component
в конце. Я знаю, что это не совсем то, что у ВАС было, но, надеюсь, другие, читающие этот ответ, могут извлечь из этого пользу.источник
import React, { Component } from 'react'; class extends Component
. Я не мог понять, как это решило проблему, заменивComponent
наReact.Component
. Имеет ли значение импорт?Для меня это было потому, что я забыл использовать
new
ключевое слово при настройке состояния Animated.например:
fadeAnim: Animated.Value(0),
в
fadeAnim: new Animated.Value(0),
исправлю это.
источник
ТЛ; др
Если вы используете React Router v4, проверьте свой
<Route/>
компонент, действительно ли вы используетеcomponent
опору для передачи компонента React на основе вашего класса!В более общем плане: если ваш класс выглядит нормально, проверьте, не пытается ли вызывающий его код использовать его как функцию.
объяснение
Я получил эту ошибку, потому что я использовал React Router v4, и я случайно использовал
render
опору вместо той, чтоcomponent
в<Route/>
компоненте, чтобы передать свой компонент, который был классом. Это было проблемой, потому чтоrender
ожидает (вызывает) функцию,component
которая будет работать с компонентами React.Итак, в этом коде:
Строка, содержащая
<Route/>
компонент, должна была быть написана так:Обидно, что они не проверяют это и выдают полезную ошибку за такую легко обнаруживаемую ошибку.
источник
Со мной случилось, потому что я использовал
PropTypes.arrayOf(SomeClass)
вместо того
PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))
источник
PropTypes.oneOfType([SomeClass, SomeOtherClass]).isRequired,
вместоPropTypes.oneOfType([PropTypes.instanceOf(SomeClass), PropTypes.instanceOf(SomeOtherClass)]).isRequired,
Вы продублировали
export default
декларацию. Первый заменяется вторым, который на самом деле является функцией.источник
Для меня это было
ComponentName.prototype
вместоComponentName.propTypes
. авто предложеноPhpstorm
IDE. Надеюсь, это кому-то поможет.источник
У меня возникла та же проблема, потому что мой
ES6
класс компонента не расширялсяReact.Component
.источник
В основном эти проблемы возникают, когда вы пропускаете расширение Component из response:
источник
Для меня это было потому, что я использовал прототип вместо propTypes
это должно быть
источник
в
кто-то должен прокомментировать, как очень точно отслеживать такую ошибку.
источник
Похоже, что нет ни одного случая появления этой ошибки.
Со мной случилось, когда я не объявлял конструктор в компоненте с полным состоянием.
вместо того
источник
Вы можете проверить две вещи:
источник
Это общая проблема, не возникающая ни в одном случае. Но общая проблема во всех случаях заключается в том, что вы забываете
import
о конкретном компоненте (не имеет значения, из установленной вами библиотеки или из созданного вами компонента):import {SomeClass} from 'some-library'
Когда вы используете его позже, не импортируя, компилятор думает, что это функция. Поэтому ломается. Это типичный пример:
imports
...code...
а затем где-то внутри вашего кода
<Image {..some props} />
Если вы забыли импортировать компонент,
<Image />
компилятор не будет жаловаться, как при импорте других компонентов , но сломается, когда достигнет вашего кода.источник
Для меня это произошло потому, что я случайно удалил свой
render
метод!У меня был класс с
componentWillReceiveProps
методом, который мне больше не нужен, непосредственно перед короткимrender
методом. В спешке удаляя его, я случайно удалил и весьrender
метод.Это была БОЛЬ, которую нужно было выследить, так как я получал консольные ошибки, указывающие на комментарии в совершенно нерелевантных файлах как на «источник» проблемы.
источник
У меня была аналогичная проблема, я неправильно вызывал метод рендеринга
Выдал ошибку:
вместо того
верный:
источник
У меня было такое, когда я так делал:
правильно:
или
источник
Для меня это произошло потому, что я не обернул свою функцию подключения должным образом и попытался экспортировать два компонента по умолчанию
источник
Я столкнулся с этой ошибкой, когда импортировал неправильный класс и ссылался на неправильный магазин при использовании mobx в react-native.
Я столкнулся с ошибкой в этом фрагменте:
После нескольких исправлений, как показано ниже. Так я решил свою проблему.
Что на самом деле было не так, я использовал неправильный класс вместо того,
observer
что использовал,Observer
и вместо того, чтобыcounterStore
использоватьcounter
. Так я решил свою проблему.источник
В файле
MyComponent.js
Я добавляю некоторую функцию, связанную с этим компонентом:
а затем в другом файле импортировали эту функцию:
Вы можете определить проблему?
Я забыл фигурные скобки и импортировал
MyComponent
под именемmyFunction
!Итак, исправление было:
источник
Я испытал это, когда неправильно написал оператор импорта при импорте функции, а не класса. Если
removeMaterial
это функция в другом модуле:Правильно:
Неправильно:
источник
Я получил эту ошибку, сделав небольшую ошибку. Моя ошибка заключалась в экспорте класса как функции, а не как класса. Внизу моего файла класса у меня было:
когда это должно было быть:
источник
Я также столкнулся с этим, возможно, у вас есть ошибка javascript внутри вашего компонента реакции. Убедитесь, что при использовании зависимости вы используете
new
оператор класса для создания нового экземпляра. Ошибка выдает, еслиthis.classInstance = Class({})
вместо этого используйте
this.classInstance = new Class({})
вы увидите в цепочке ошибок в браузере
at ReactCompositeComponentWrapper._constructComponentWithoutOwner
я считаю, что это раздача.
источник
Попробуйте остановить HMR и нажмите еще
npm start
раз, чтобы восстановить проект.Это заставило ошибку исчезнуть, не знаю почему.
источник
В моем случае я написал
comment
вместоComponent
ошибочноЯ только что это написал.
Вместо этого.
это не имеет большого значения, но для новичка вроде меня это действительно сбивает с толку. Надеюсь, это будет полезно.
источник
В моем случае, используя JSX, родительский компонент вызывал другие компоненты без "<>"
исправление
источник
Другой отчет здесь: Не сработало, когда я экспортировал:
вместо того
Обратите внимание на положение скобок. Оба правильные и не попадутся ни линтеру, ни красивее, ни чему-то подобному. Мне потребовалось время, чтобы разыскать его.
источник
В моем случае я случайно поставил имя компонента (
Home
) в качестве первого аргумента функцииconnect
функции, хотя он должен был быть в конце. Дух.Этот, конечно же, дал мне ошибку:
Но этот сработал, конечно, нормально:
источник
Это произошло, когда я случайно
render
неправильно назвал свою функцию:Мой экземпляр этой ошибки был вызван просто тем, что у моего класса не было подходящего
render
метода.источник
Собственно все проблемы redux подключаются. решения:
Правильно :
Неправильно и ошибка :
источник
Для меня это был неправильный импорт редуктора в rootReducer.js. Я импортировал контейнер вместо файла-редуктора.
пример
Но конечно должно быть
Где каталог настроек содержит следующие файлы actions.js, index.js, reducer.js.
Чтобы проверить это, вы можете зарегистрировать аргументы redux для функции assertReducerShape () из файла redux / es / redux.js.
источник