Реагировать и ловить - Получение TypeError: Object (...) не является функцией - PullRequest
0 голосов
/ 08 марта 2020

Я использую Mapbox, чтобы попытаться отобразить различные координаты из локального JSON файла.

Однако я получаю ошибку TypeError: Object(...) is not a function. Я посмотрел некоторую информацию о том, что может быть причиной (например, более ранние версии react не будут работать с хуками), но, поскольку это довольно расплывчато, я не знаю, как правильно его диагностировать.

У меня есть компонент, использующий перехватчики React, и я считаю, что он ответственен за ошибку. Я не могу сказать, устарел ли один из моих пакетов, связан ли он с тем, как написана / настроена функция / et c, или с чем-то другим.

Вот JS Скрипка, показывающая полный код компонента: https://jsfiddle.net/bsp7q839/


пакет. json:

"dependencies": {
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-map-gl": "^5.2.3",
    "react-mapbox-gl": "^4.8.2",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.0",
    "reactstrap": "^8.4.1",
    "sass": "^1.26.1"
  },

Компонент . js:

import React, { useState, useEffect } from 'react';
import ReactMapGL, { Marker, Popup } from "react-map-gl";
import * as crimeData from "../data/casefile-json.json";

export default function CrimeMap() {
  const [viewport, setViewport] = useState({
    // latitude, longitude, etc
  })

  const [selectedLocation, setSelectedLocation] = useState(null);

  useEffect(() => {
    const listener = (e) => {
      if (e.key === 'Escape') {
        setSelectedLocation(null);
      }
    };
    window.addEventListener("keydown", listener);

    return () => {
      window.removeEventListener("keydown", listener)
    }
  }, [])

// etc

Приложение. js:

import React from 'react';
import { BrowserRouter, Route, Switch } from "react-router-dom";

import Header from "./components/Header.js";
import CrimeMap from "./components/CrimeMap.js";

import './App.css';

function App() {
    return (
     <BrowserRouter>
      <div className="App">
        <Header />
        <CrimeMap />
          <Switch>
            <Route path="/crime_map" component={CrimeMap} exact />

          </Switch>  
          {/* <Footer /> */}
      </div>
     </BrowserRouter>
    )
} 

export default App;

JSON фрагмент:

{
  //
  "fields": [
    {
      "name": "FID",
      "type": "esriFieldTypeOID"
    }
  ],
  "cases": [
    {
      "attributes": {
        "CaseNumber": 1,
        "CaseName": "The Wanda Beach Murders",
        "Episode Date (M/D/Y)": "1/9/2016",
        "Length of Case": "1:14:02",
        "Researched by": "Anonymous Host",
        "CountryOfCrime": "Australia",
        "StateOfCrime": "New South Wales",
        "CityOfCrime": "Sydney"
        },
        "geometry": {
          "x": -33.868820,
          "y": 151.209290
        }
      },

1 Ответ

0 голосов
/ 08 марта 2020

Вы должны быть в состоянии нажать на ошибку в консоли вашего браузера, и это приведет вас к файлу / строке, где происходит ошибка.

enter image description here

Например, выше приведена ошибка, которую я получаю в указанном вами jsfiddle, можно нажать (index):32. Это покажет вам место возникновения вашей ошибки.

Похоже, что объект используется здесь как функция, и это, безусловно, дает сбой. Попробуйте console.log набрать некоторые значения, которые вы видите в строке ошибки. Это может быть, скажем, useState, и если оно не определено, вам нужно обновить пакет React npm.

...