JavaScript。反应雷杜。异步的。在呈现DOM之前,循环未完成
我正在开发一个Messagelist组件,其中我正在从外部API提取消息数据。每条消息都包含一个UserId,我将使用它来查询我自己的API以获取更多的用户信息。我将foundUsers列表放在我的redux存储中,并已连接我的组件。在呈现到DOM之前,我的目标是循环遍历每个消息,并用相应用户的名称替换userid 我遇到的问题是,在渲染组件之前,循环似乎没有完成,这给了我一些奇怪的行为 半秒钟后 这是我的密码:JavaScript。反应雷杜。异步的。在呈现DOM之前,循环未完成,javascript,reactjs,Javascript,Reactjs,我正在开发一个Messagelist组件,其中我正在从外部API提取消息数据。每条消息都包含一个UserId,我将使用它来查询我自己的API以获取更多的用户信息。我将foundUsers列表放在我的redux存储中,并已连接我的组件。在呈现到DOM之前,我的目标是循环遍历每个消息,并用相应用户的名称替换userid 我遇到的问题是,在渲染组件之前,循环似乎没有完成,这给了我一些奇怪的行为 半秒钟后 这是我的密码: render(){ let users = this.prop
render(){
let users = this.props.chatkit.roomUsers
let userIds = users.map((user) => {
return user.id
})
let roomMessages = this.props.messages
let messages = []
for(var i = 0; i < roomMessages.length; i++){
//create a new field to give each message a unique id
roomMessages[i].unique = roomMessages[i].senderId
//create a new field to give each message the avatar from that user
let matchingUserIndex = userIds.indexOf(roomMessages[i].senderId)
if(matchingUserIndex >= 0){
roomMessages[i].avatar = users[matchingUserIndex].avatar
}
//review messages
let previous = {}
if(i > 0){
previous = roomMessages[i - 1]
}
let currentMessage = roomMessages[i]
//check if consecutive messages are made by the same user
if(currentMessage.senderId === previous.senderId && currentMessage.unique === previous.unique){
//display user name and avatar as an empty string
messages.push({...currentMessage, unique: "", avatar: ""})
} else{
//display the user name
messages.push({...currentMessage})
}
}
//transform the unique field to contain the name of the user
let updatedMessages = []
for(var j = 0; j < messages.length; j++){
let matchingIdIndex = userIds.indexOf(messages[j].unique)
if(matchingIdIndex >= 0 && messages[j].unique !== ""){
messages[j].unique = users[matchingIdIndex].name
updatedMessages.push(messages[j])
} else {
updatedMessages.push(messages[j])
}
}
let currentChatkitUser = this.props.chatkit.chatUser.id
return(
<div>
{this.props.room && (
<div
style={{overflow: "scroll", overflowX: "hidden", maxHeight: "70vh"}}
ref={this.messageList}
>
<ul style={{listStyle: "none"}} className="p-4 mb-0">
{updatedMessages.map((message, index) => {
return (
<li
className="mb-1"
key={index}>
<div>
{message.unique && (
<span
className="d-block font-weight-bold mt-3"
style={{color: "#000323"}}
>
<img
src={message.avatar}
style={{width: "2.5rem"}}
className="rounded-circle mr-2"
/>
{message.unique}
</span>
)}
<span
className={message.senderId === currentChatkitUser ?
"muted-blue text-light rounded d-inline-block ml-5" : "bg-secondary text-light rounded d-inline-block ml-5"
}
style={{padding:".25rem .5rem"}}
>
{message.text}
</span>
</div>
</li>
)
})}
</ul>
<TypingIndicator usersWhoAreTyping={this.props.usersWhoAreTyping}/>
<div
style={{float: "left", clear: "both"}}
ref={this.messagesEnd}>
</div>
</div>
)}
</div>
)
}
render(){
让用户=this.props.chatkit.roomUsers
让userid=users.map((user)=>{
返回用户id
})
让roomMessages=this.props.messages
让消息=[]
对于(var i=0;i=0){
roomMessages[i].avatar=用户[matchingUserIndex].avatar
}
//查看消息
让上一个={}
如果(i>0){
先前=房间消息[i-1]
}
让currentMessage=roomMessages[i]
//检查连续消息是否由同一用户生成
if(currentMessage.senderId==previous.senderId&¤tMessage.unique==previous.unique){
//将用户名和化身显示为空字符串
messages.push({…currentMessage,唯一:“”,头像:“”)
}否则{
//显示用户名
messages.push({…currentMessage})
}
}
//转换唯一字段以包含用户名称
让updatedMessages=[]
对于(var j=0;j=0&&messages[j].unique!==“”){
消息[j].unique=users[matchingIdIndex].name
updatedMessages.push(消息[j])
}否则{
updatedMessages.push(消息[j])
}
}
让currentChatkitUser=this.props.chatkit.chatUser.id
返回(
{this.props.room&&(
{updatedMessages.map((消息,索引)=>{
返回(
-
{message.unique&&(
{message.unique}
)}
{message.text}
)
})}
)}
)
}
使用state属性(例如loading=true),在初始值处将返回一些加载DOM的呈现。定义一个执行所有循环活动的函数,并在componentwillmount中执行该函数,完成循环后,将loading属性的state设置为false,通过该属性,可以使DOM在render方法中呈现用户列表。(不确定componentwillmount是否已弃用)。使用状态属性(例如,loading=true),在初始值处将返回一些加载DOM。定义一个执行所有循环活动的函数,并在componentwillmount中执行该函数,完成循环后,将loading属性的state设置为false,通过该属性,可以使DOM在render方法中呈现用户列表。(不确定componentwillmount是否已弃用)。请向我们展示您的道具和状态的定义。请向我们展示您的道具和状态的定义。