【发布时间】:2021-11-06 13:14:28
【问题描述】:
这是我的代码,其中我在对象数组上运行映射函数,每个对象有 2 个条件检查,第一个条件中有一个异步操作,然后是 return 语句。错误是这样的-
未捕获的错误:对象作为 React 子项无效(找到:[object Promise])。如果您打算渲染一组子项,请改用数组。
<ChannelList
style={{
padding: '8px',
}}
>
{Promise.all(channelList.map((channel) =>
{
console.log(channel);
const channelMetaData = JSON.parse(channel?.Metadata);
//If it is one-to-one chat
console.log(channelMetaData);
if(channelMetaData?.isOneToOne){
listChannelMemberships(channel.ChannelArn,userId).then(async (res)=>{
if(res[0].Member.Name==userData.username){
console.log("I am this user",res[0].Member.Name);
var otherPerson = res[1].Member.Name;
}else if(res[1].Member.Name==userData.username){
console.log("I am this user",res[1].Member.Name);
var otherPerson = res[0].Member.Name;
}
console.log(otherPerson);
return <ChannelItem
key={channel.ChannelArn}
name={otherPerson}
actions={loadUserActions(userPermission.role, channel)}
isSelected={channel.ChannelArn === activeChannel.ChannelArn}
onClick={e => {
e.stopPropagation();
channelIdChangeHandler(channel.ChannelArn);
}}
unread={unreadChannels.includes(channel.ChannelArn)}
unreadBadgeLabel="New"
>
</ChannelItem>
})
}
else{
return <ChannelItem
key={channel.ChannelArn}
name={channel.Name}
actions={loadUserActions(userPermission.role, channel)}
isSelected={channel.ChannelArn === activeChannel.ChannelArn}
onClick={e => {
e.stopPropagation();
channelIdChangeHandler(channel.ChannelArn);
}}
unread={unreadChannels.includes(channel.ChannelArn)}
unreadBadgeLabel="New"
>
</ChannelItem>
}
}
))}
</ChannelList>
【问题讨论】:
-
如果您将此代码与组件需要呈现的内容分离为辅助函数(如 API 调用和操作),您会更容易理解和调试。
标签: javascript reactjs es6-promise asynchronous-javascript