react-native - 在平面列表中从 API 呈现 GET JSON 响应时出现问题
问题描述
我需要创建一个与存储客户信息的 API 交互的应用程序。
我创建了一个getCustDetail
函数,它将使用一种GET
方法请求有关客户的信息。
这是向 API 发送请求时服务器应发送的内容:
{
"cust_id": 1,
"given_name": "John",
"family_name": "Smith",
"email": "smith99@hotmail.com",
"recent_purchases": [
{
"item_id": 1,
"price": 20,
"item_descr": "Small apple”
},
{
"item_id ": 2,
" price ": 15,
"item_descr": "Sponge Cake”
}
}
]
}
这是我的 getGET
函数,它获取响应并将其存储在:
userDetails: [] state
我尝试将响应 JSON 字符串转换为数组,以便可以使用以下object.values
函数将其显示在我的平面列表中:
'userDetail: Object.values(resJson),'
getCustDetails () {
return fetch(‘API URL HERE’,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
.then((res) => res.json())
.then((resJson) => {
this.setState({
userDetail: Object.values(resJson),
});
console.log("The server response is :" + this.state.userDetail)
})
.catch((error) => {
console.log(error);
});
}
来自 getuserdetail 函数的控制台日志消息:
"The server response is : 1,John,Smith,smith99@hotmail.com,[object Object],[object Object]"
我的平面列表设置为获取客户详细信息并将其显示在应用程序中:
<FlatList
data={this.state.myDetails}
keyExtractor={({ user_id }) => user_id}
renderItem={({ item }) => <View style={styles.list}>
<Text style={styles.ListText}>{item.cust_id }</Text>
<Text style={styles.ListText}>{item.given_name}</Text>
<Text style={styles.ListText}>{item.family_name}</Text>
<Text style={styles.ListText}>{item.email}</Text>
</View>}
/>
当我尝试在我的应用程序上获取客户信息时,会出现空白的平面列表文本,其中没有数据。
我究竟做错了什么?
解决方案
您必须将extraData
道具传递给 Flatlist。如文档中所述:
通过将 extraData={selected} 传递给 FlatList,我们确保 FlatList 本身会在状态更改时重新渲染。如果不设置这个 prop,FlatList 将不知道它需要重新渲染任何项目,因为它是一个 PureComponent,并且 prop 比较不会显示任何更改。
所以让你的平面列表像这样:
<FlatList
data={this.state.myDetails}
extraData={this.state}
keyExtractor={({ user_id }) => user_id}
renderItem={({ item }) => (
<View style={styles.list}>
<Text style={styles.ListText}>{item.cust_id }</Text>
<Text style={styles.ListText}>{item.given_name}</Text>
<Text style={styles.ListText}>{item.family_name}</Text>
<Text style={styles.ListText}>{item.email}</Text>
</View>
)}
/>
另请注意,我已对renderItem
. 建议使用花括号。
推荐阅读
- python - 在 .libsvm 格式的数据文件上应用机器学习算法
- java - Java 客户端到 C# 服务器 TCP
- sqlplus - SQLPlus - 查询输出的格式
- android - 视频作为闪屏?
- asp.net-core - 具有多个代理的 HttpClient
- git - Git 不跟踪文件夹
- android - 在每个卡片视图中都有一个微调器 - recyclerview 中的卡片视图
- schema - Orientdb maximum number of classes
- bash - Bash - 创建一个带有通配符元素的数组以进行匹配
- avasset - Failed to initialize an AVAssetExportSession (iPhone XS, XR, XMax)