Ant*_*ish 5 csv es6-modules create-react-app
我正在尝试导入与 D3 库一起使用的 CSV 以在 Create React App 项目中创建图表,但即使 CSV 文件的路径正确,导入文件也会引发“找不到模块”错误。
我有一种感觉,这可能与 CRA 的 Webpack 配置有关,但看起来这是使用文件加载器,所以我不确定问题是什么。数据文件位于 CRA 的 src 目录中。
下面代码中的控制台日志正在以正确的数据运行,这意味着必须正在访问数据。在此之后抛出错误(尽管 CSV 的路径在我的编辑器中带有红色下划线)。
我正在使用 TypeScript,但我认为这与问题无关。
import React from 'react';
import * as d3 from 'd3';
import CSVData from '../data/data.csv';
const BarChart: React.FC = () => {
d3.csv(CSVData).then(res => {
console.log(res);
});
return <div>Test</div>;
};
export default BarChart;
Run Code Online (Sandbox Code Playgroud)
感谢 Nick Ribal 的回答,我找到了一个类似的解决方案,将我的数据文件移动到公共文件夹中,然后通过 PUBLIC_URL 环境变量引用它。
我使用了 D3 CSV 方法,如果传递一个 URL,它将从 URL 获取数据,而不是使用 fetch 并将其解析为文本。
使用 D3 CSV 方法:
import React, { useState } from 'react';
import { DSVRowArray } from 'd3';
import * as d3 from 'd3';
type CSVData = DSVRowArray | null;
const BarChart: React.FC = () => {
const initialState: CSVData = null;
const [fetchedCSVData, setFetchedCSVdata] = useState<CSVData>(initialState);
if (!fetchedCSVData) {
d3.csv(`${process.env.PUBLIC_URL}/data/data.csv`).then(res => {
setFetchedCSVdata(res);
});
}
return <div>Test</div>;
};
export default BarChart;
Run Code Online (Sandbox Code Playgroud)
没有 D3 CSV 方法:
import React, { useState } from 'react';
type CSVData = string | null;
const BarChart: React.FC = () => {
const initialState: CSVData = null;
const [fetchedCSVData, setFetchedCSVData] = useState<CSVData>(initialState);
if (!fetchedCSVData) {
fetch(`${process.env.PUBLIC_URL}/data/data.csv`)
.then(res => res.text())
.then(stringData => {
console.log(stringData);
setFetchedCSVData(stringData);
});
}
return <div>Test</div>;
};
export default BarChart;
Run Code Online (Sandbox Code Playgroud)