javascript - React - 将异步数据映射到组件
问题描述
我在这里有一个 API 获取请求,在我的 useEffect 挂钩中挂载时调用,然后设置
const [multilineAccountInfo, setMultilineAccountInfo] = useState([]);
useEffect(() => {
getMultilineAccountInfo();
return () => {
console.log('cleanup home/balance');
};
}, []);
const getMultilineAccountInfo = () => {
axios
.get('Account/MultiLineAllAccountsInfo')
.then(response => {
let parse_response = JSON.parse(response.data);
let stringified_data = JSON.stringify(parse_response);
setMultilineAccountInfo(stringified_data);
})
.catch(error => {
console.log('getMultilineAccountInfo error', error);
});
};
我面临的问题是,在我的视图中,应用程序崩溃并说“未定义不是函数(靠近'...multilineAccountInfo.map...')”
const MultilineDetailHome = multilineAccountInfo.map((item, index) => (
<View key={index}>
<View style={styles.multilineCards}>
<View
style={{
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
}}>
<View>
<Text style={styles.multilineNameText}>
{item.FirstName + ' ' + item.LastName}
</Text>
<Text style={styles.multilinePhoneText}>
{formatPhoneNumber(item.Pnum)}
</Text>
</View>
<View style={{marginLeft: hp('3%')}}>
<View
style={{
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
}}>
<Text style={styles.multilineBalanceText}>
${item.Balance.toFixed(2)}
</Text>
</View>
<Text style={styles.multilineTypeText}>{item.AccountType}</Text>
</View>
</View>
</View>
</View>
));
我很确定这是因为 setState() 的异步性质以及在调用 .map() 方法之前没有及时返回数据。
我将如何在 .map() 之前等待 API 调用完成并最终在 UI 中呈现视图?
谢谢你的帮助!
解决方案
如果您在加载数据时遇到问题,可以使用以下方法:
multilineAccountInfo.length > 0 ? YOUR COMPONENT : <h1>LOADING</h1>
另一种方法可以使用另一种状态,例如:
[isLoading, setLoading] = useState(true);
然后按照你的async
方法设置它。
.then(response => {
let parse_response = JSON.parse(response.data);
let stringified_data = JSON.stringify(parse_response);
setMultilineAccountInfo(stringified_data);
setLoading(false);
})
现在您可以在组件渲染部分使用它:
isLoading? Text("Loading"):YOUR COMPONENT
推荐阅读
- python - 如何创建一个计算用户投票的程序
- javascript - node-react javascript应用程序-如何将特殊字符(符号)作为html中的输入
- java - java.io.ObjectInputStream 类型无法解析(eclipse)
- python - Spark 2.4.4 Avro Pyspark Shell 配置
- excel - VLOOKUP 未正确匹配
- python - 如何仅根据键中元组的一个元素对字典中的值求和?
- python - SQliteQueueDatabase 更新延迟?
- c - 将 NULL 添加到 char 双指针
- android - KITKAT 上的“onActivityResult”有时为空值的 Android 变量
- javascript - 在对话框关闭时取消异步状态更改