使用 React 按最近的消息对聊天中的用户进行排序
Sort Users in chat by most recent messages with React
我需要根据用户发送的新消息 在我的 ReactJS 聊天应用程序 中对用户数组 进行排序, 更新每条新消息,例如 whatsApp 或电报。
下面是两个不同数组的简化界面:用户和消息:
我正在使用 momentjs 处理日期,存储的日期格式是这样的时间戳:
2021-03-26 00:17:50
interface userProps {
id: string;
chat_id: string;
first_name: string;
last_name: string;
}
interface messagesProps {
id?: string;
chat_id?: string;
content?: string;
send_by?: string;
visualized?: boolean;
created_at?: string;
}
所有消息都存储在数组中并通过chatID过滤,两个数组有共同点。
有谁知道这个挑战的最佳解决方案是什么?
我不太确定你的聊天室是如何参与的,但你可以使用像这样的简单 JS 代码让用户按 id 排序:
const sortedUserIds = messages // you array of messagesProps
.sort() // you already know the correct way to sort your messages
.map(m => m.send_by)
.filter(m => m.send_by !== null)
const sortedUsers = [...new Set(sortedUserIds)].map(id => users.find(u => u.id === id))
既然你已经参与了react,你可以基于messages
array with react hooks来触发上面的代码:
const [users, setUsers] = useState([]);
useEffect(() => {
run the code above to get sorted users
setUsers(your sorted users);
}, [messages])
return (
<ul>
{users.map(u => <li>{u.first_name}</li>)}
</ul>
)
我需要根据用户发送的新消息 在我的 ReactJS 聊天应用程序 中对用户数组 进行排序, 更新每条新消息,例如 whatsApp 或电报。
下面是两个不同数组的简化界面:用户和消息:
我正在使用 momentjs 处理日期,存储的日期格式是这样的时间戳: 2021-03-26 00:17:50
interface userProps {
id: string;
chat_id: string;
first_name: string;
last_name: string;
}
interface messagesProps {
id?: string;
chat_id?: string;
content?: string;
send_by?: string;
visualized?: boolean;
created_at?: string;
}
所有消息都存储在数组中并通过chatID过滤,两个数组有共同点。
有谁知道这个挑战的最佳解决方案是什么?
我不太确定你的聊天室是如何参与的,但你可以使用像这样的简单 JS 代码让用户按 id 排序:
const sortedUserIds = messages // you array of messagesProps
.sort() // you already know the correct way to sort your messages
.map(m => m.send_by)
.filter(m => m.send_by !== null)
const sortedUsers = [...new Set(sortedUserIds)].map(id => users.find(u => u.id === id))
既然你已经参与了react,你可以基于messages
array with react hooks来触发上面的代码:
const [users, setUsers] = useState([]);
useEffect(() => {
run the code above to get sorted users
setUsers(your sorted users);
}, [messages])
return (
<ul>
{users.map(u => <li>{u.first_name}</li>)}
</ul>
)