javascript - 如何在 React 中为不同的 json 结构创建可重用的 fetch?
问题描述
我在不同的组件中使用 fetch:
fetch(url)
.then(result => {
if (!result.ok) {
throw new Error("HTTP error " + result.status)
}
return result.json()
})
.then(result => {
this.setState({
data: result,
})
})
.catch(error => {})
但是json数据有不同的结构:
state = {
data: [],
}
和
state = {
data: {
items: [],
}
}
我想为这两种结构制作一个可重用的功能组件。如果可能,如何创建它?我试着用这个
export function getList(url) {
fetch(url)
.then(result => {
if (!result.ok) {
throw new Error("HTTP error " + result.status)
}
return result.json()
})
.then(result => {
return result
})
.catch(error => {})
}
对两者都有相同的要求
this.setState({
data: getList(url),
})
但是遇到了错误Cannot read property 'map' of undefined
解决方案
你得到错误'但有一个错误无法读取未定义的属性'map'',因为函数返回未定义。您需要返回fetch
export function getList(url) {
return fetch(url)
....
}
现在,假设 getList 以这种格式返回数据
data: {
items: [],
}
您保持返回的数据相同,只需更改组件的映射。所以基本上你重用了 fetch 调用。
第一个组件:
async getSetData(url){
const data = await getList(url);
this.setState({
data: data,
})
}
第二部分:
async getSetData(url){
const data = await getList(url);
this.setState({
data: data.items,
});
}
推荐阅读
- amazon-web-services - 连接到 DynamoDB Docker 时无法使用 NoSQL Workbench for DynamoDB 找到表
- maven - java-maven项目中如何定义环境变量?
- python - Python 相同的数据不相同,功能也不同
- json - 如何使用robotframework遍历json的所有元素并仅获取与查询匹配的元素
- r - 在 R 中创建一个名为 clean_data 的函数
- angular - 如何在switchMapTo的内部观察者中使用外部观察者的结果?
- javascript - `didInsertElement` 的 Ember Octane 替代品是什么?
- ruby - 无法在 cloud9 ide 上启动 heroku
- javascript - Discord.js - 命令行问题
- ffmpeg - 在 azure 函数或 azure web 作业中使用 NReco FFMpegConverter