[javascript] 내 React 프로젝트에서 “클래스를 함수로 호출 할 수 없음”이 표시됨

프로젝트에 React 맵 구성 요소를 추가하려고하는데 오류가 발생합니다. Fullstack React의 블로그 게시물 을 참조로 사용하고 있습니다. google_map.js 라인 83에서 오류가 발생하는 위치를 추적했습니다.

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
    }
  }

지금까지 내지도 구성 요소는 다음과 같습니다. 마지막 세 줄인 58-60 줄을 주석 처리하면 페이지가 잘로드됩니다 (지도없이). 편집 : @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'))



답변

나에게 그것은 내가 extends React.Component마지막 에 쓰는 것을 잊었을 때 일어났다 . 나는 그것이 정확히 당신이 가진 것이 아니라는 것을 알고 있지만이 답변을 읽는 다른 사람들은 이것으로부터 이익을 얻을 수 있기를 바랍니다.


답변

나를 위해 사용하는 것을 잊었 기 때문에 new 애니메이션 상태를 설정할 때 키워드 입니다.

예 :

fadeAnim: Animated.Value(0),

fadeAnim: new Animated.Value(0),

그것을 고칠 것입니다.


답변

tl; dr

React Router v4를 <Route/>사용하는 경우 실제로component prop을 하여 클래스 기반 React 구성 요소를 전달 !

더 일반적으로 : 클래스가 괜찮아 보이면 클래스를 호출하는 코드가이를 함수로 사용하지 않는지 확인하십시오.

설명

나는 내가 사용했기 때문에이 오류가 발생했습니다 라우터 V4를 반응 실수로 사용 된 render소품 대신 component<Route/>수업이었다 내 구성 요소를 전달하는 구성 요소를. 이것은 render함수를 기대 (호출)하고 componentReact 컴포넌트에서 작동 하는 함수 이기 때문에 문제였습니다 .

따라서이 코드에서 :

<HashRouter>
    <Switch>
        <Route path="/" render={MyComponent} />
    </Switch>
</HashRouter>

<Route/>구성 요소를 포함하는 줄 은 다음과 같이 작성되어야합니다.

<Route path="/" component={MyComponent} />

그들이 그것을 확인하지 않고 그렇게하고 잡기 쉬운 실수에 대해 사용 가능한 오류를 제공하는 것은 부끄러운 일입니다.


답변

내가 사용했기 때문에 나에게 일어난

PropTypes.arrayOf(SomeClass)

대신에

PropTypes.arrayOf(PropTypes.instanceOf(SomeClass))


답변

중복 된 export default신고가 있습니다. 첫 번째는 실제로 함수 인 두 번째로 대체됩니다.


답변

나를 위해, 그것은이었다 ComponentName.prototype대신 ComponentName.propTypes. PhpstormIDE에서 자동 제안 . 누군가를 도울 수 있기를 바랍니다.


답변

동일한 문제가 발생했습니다 . ES6구성 요소 클래스가 확장되지 않았기 때문에 발생했습니다 React.Component.