无法在我的 RN 项目中使用打字稿“useEffect”获取本地 json

Posted

技术标签:

【中文标题】无法在我的 RN 项目中使用打字稿“useEffect”获取本地 json【英文标题】:Can't fetch local json using typescript "useEffect" in my RN Project 【发布时间】:2021-12-08 16:00:30 【问题描述】:
const jsonUrlExternal = require('https://reactnative.dev/movies.json'); //this works
const jsonUrlLocal  = require('../../json/MOCK_DATA.json'); //this doesn't work

当我使用第一个 const jsonUrlExternal 时,我的应用程序运行良好并以 JSON 格式获取数据。但是,当我只是将 URL 更改为本地路径时,它会给我一个错误:Type Error: Network request failed。下面是我用来获取本地和外部 JSON 文件的代码:

    const [data, setData] = useState([]);

    useEffect(() => 
        fetch(jsonUrlLocal) //the error appears exactly when i write this line
        .then((response) => response.json())
        .then((json) => setData(json.movies))
        .catch((error) => alert(error))
    )

这是我用来显示来自 JSON 的数据的 FlatList

                <FlatList 
                    data=data
                    keyExtractor=(id, index) => id
                    renderItem=(item) => (
                        <Text>
                            item.title, item.realeseYear
                        </Text>
                    )
                />

简而言之:当我使用来自 URL 的外部 JSON 时,我的 FlatList 可以工作,但是当我只是将 URL 更改为本地 path/to/the/file/ 时,应用程序会返回错误消息:Type Error: Network request failed。 OBS:本地 JSON 中的内容正是 ExternalJson 的 RAW Copy。我确定本地 JSON 没有输入错误。

【问题讨论】:

您不只是正常导入 JSON 文件(使用***导入)是否有原因?该文件已经存在,您不会从其他地方获取它。 【参考方案1】:

当您 require() 本地 .json 文件时,我期望发生的是获取对象而不是 URL。然后,Fetch 会刺探该对象并向'[object%20Object]' 发出请求,这自然会失败。

因为你已经require()d 了,所以没有必要去获取它。它已经被解析并可以使用了。

const mockData = require('../../json/MOCK_DATA.json');



                <FlatList 
                    data=mockData
                    keyExtractor=(id, index) => id
                    renderItem=(item) => (
                        <Text>
                            item.title, item.realeseYear
                        </Text>
                    )
                />

【讨论】:

在这个简单的项目中还有其他方法可以使用我的本地 JSON 吗?我不想使用外部 JSON,因为我正在构建一个 CRUD,所以数据将存储在本地。我尝试在本地主机中上传并使用 URL 访问文件,但我得到了XX.XX/MOCK_DATA.json could not be found within the project。谢谢你帮助我。另外,对不起我的英语不好。 很大程度上取决于您的构建设置,但如果您 require()d .json 文件,您可以将其用作对象。你不需要获取它或任何东西。 require() 之后尝试console.log()ing jsonUrlLocal。它应该是一个对象(或数组)。

以上是关于无法在我的 RN 项目中使用打字稿“useEffect”获取本地 json的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 tsc 节点模块编译打字稿

如何在打字稿中正确使用 lodash-es?

无法在 Docker 中编译打字稿

打字稿定义无法导入Angular2

Vscode无法使用Sailsjs Services和打字稿

从打字稿中的索引文件导出JSON文件