繁体   English   中英

如何在 create-react-app React 项目中使用 useEffect() 引用本地数据文件?

[英]How do I refer to a local data file using useEffect() in a create-react-app React project?

我正在开发一个使用 create-react-app 构建的 React 项目,并且对如何使用useEffect()引用本地 JSON 文件感到困惑。

我的目录结构如下:

public
src
    components
    data
        test.json
    App.js

在 App.js 中,我使用useEffect()fetch()来获取 JSON 文件。

useEffect(() => {
        const getData = () => {
            fetch('./data/test.json'
            , {
                headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json'
                }
            }
            ).then(function(response) {
                return response.json();
            }
            ).then(function(myJson) {
                // lots of processing happens
            });
        };
        getData();
        setTheContent(toUse);
    },[slug]);

但是我在控制台中得到了 http://localhost:3000/data/test.json 的 404。

如果我将数据文件夹放在公共目录中(并保留获取路径不变),它可以正常工作,但我的理解是我不应该为此使用公共目录

还有一点信息:我使用的是useEffect()而不是仅仅导入 JSON 文件,因为我最终需要根据 URL 参数导入不同的数据文件。

由于 CRA 使用 webpack, src文件夹中的 URL 被转换(由 webpack “优化”)。

因此,您唯一的选择是在文件的 URL 上使用requireimport ,或者将文件移动到public文件夹(然后 webpack 不会处理)。

无论哪种方式,当您从有效的 URL 获取它时,都应该重构它。

// Use require
const data = require("./data/data.json");

// Or import it beforehand
import data from "./data/data.json"

setData(data);

您可以将文件放在公共文件夹中,该文件夹不包含任何敏感数据,哪些文件可以帮助您呈现内容。 将内容提供给 public 文件夹下的 url 文件时,只考虑 public 文件夹之外的文件(其他文件仅用于开发目的)。 在构建项目时,src 文件夹中的文件将转换为 js 文件块,并返回一个目录,其中包含来自 public 文件夹的文件和从 src 文件夹构建的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM