首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未处理的拒绝(TypeError):无法读取未定义的属性(读取“”appendChild“”)

未处理的拒绝(TypeError):无法读取未定义的属性(读取“”appendChild“”)
EN

Stack Overflow用户
提问于 2021-09-28 06:42:19
回答 1查看 381关注 0票数 3

我正在使用功能组件在React.js中制作AntV的choropleth。以下是我的图表代码:

代码语言:javascript
复制
import DataSet from '@antv/data-set';
import { Chart } from '@antv/g2';

const CustomerByRegion = () => {
   const [chartData , setChartData] = useState(null);

  useEffect(() => {
    
    getChartData()
      .then(data => {
        setChartData(data)
      })
  } ,[] );

 const getChartData = () => {
  return fetch("https://gw.alipayobjects.com/os/antvdemo/assets/data/world.geo.json").then(res => res.json())
  .then(mapData => {
    const chart = new Chart({
      container: 'container',
      autoFit: true,
      height: 500,
      padding: [55, 20]
    });
    chart.tooltip({
      showTitle: false,
      showMarkers: false,
      shared: true,
    });
    chart.scale({
      longitude: {
        sync: true
      },
      latitude: {
        sync: true
      }
    });
    chart.axis(false);
    chart.legend('trend', {
      position: 'left'
    });
    const ds = new DataSet();
    const worldMap = ds.createView('back')
      .source(mapData, {
        type: 'GeoJSON'
      });
    const worldMapView = chart.createView();
    worldMapView.data(worldMap.rows);
    worldMapView.tooltip(false);
    worldMapView.polygon().position('longitude*latitude').style({
      fill: '#fff',
      stroke: '#ccc',
      lineWidth: 1
    });
  });
 }
  
  return isLoading ? (
      <Spinner />
    ) : (
        <div id="container">
          {chartData}
        </div>
    );
};

export default CustomerByRegion;

现在这段代码在.jsx文件中。

我在“const chart = new Chart()”中得到这个错误。有没有人能告诉我解决方案或指引我走上正确的道路?已附加错误图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-28 07:03:11

我的猜测是,当您从另一个文件导出<div id="container">时,chartData还没有挂载和呈现。在组件挂载和呈现之后,在React生命周期中执行fetch

chartData转换为可以在CustomerByRegion挂载时从useEffect挂钩调用的函数。您还需要确保在效果运行时安装了id="container" div,以便它是可识别的。

代码语言:javascript
复制
export const getChartData = () => {
  return fetch(.....)
    .then(.....)
};

CustomerByRegion

代码语言:javascript
复制
import { useEffect, useState } from 'react';
import { getChartData } from "./chart";

const CustomerByRegion = () => {
  const [isLoading, setIsLoading] = useState(false);
  const [chartData, setChartData] = useState();

  useEffect(() => {
    setIsLoading(true);
    getChartData()
      .then(data => setChartData(data))
      .finally(() => setIsLoading(false));
  }, []);
  
  return (
    <div id="container">
      {isLoading ? <Spinner /> : chartData}
    </div>
  );
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69356909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档