感谢您的阅读和我的帮助。
所以我有一个深流 WebSocket 服务器,当用户将卡片添加到看板表时,我会触发一个事件,例如
client.event.emit(MY_EVENT_CHANNEL, CARD_DATA)
然后在课堂上,我正在听这个事件,每当它收到一条消息时,我想更新一个反应状态,比如
const [columns, setColumns] = useState(columns)
let tempElement = [...columns.messages];
tempElement.push(MESSAGE_FROM_DEEPSTREAM)
setColumns((state) => ({
...state,
[MESSAGE_FROM_DEEPSTREAM.columnId]: {
columnId: MESSAGE_FROM_DEEPSTREAM.columnId,
columnName: state[MESSAGE_FROM_DEEPSTREAM.columnId].columnName,
columnColor: state[MESSAGE_FROM_DEEPSTREAM.columnId].columnColor,
messages: tempElement
}}));
所以我只是用 got 更新指定的列消息MESSAGE_FROM_DEEPSTREAM
。我的问题是,如果我从按钮的onClick
事件中执行上述代码,它工作得很好,但是当我从事件订阅触发时,第一条消息改变了状态,但改变的状态没有呈现卡片:/
client.event.subscribe(projectId + "/retro/" + kanbanId + "/message",
(MESSAGE_FROM_DEEPSTREAM: any) => {
let tempElement = [...columns.messages];
tempElement.push(MESSAGE_FROM_DEEPSTREAM)
setColumns((state) => ({
...state,
[MESSAGE_FROM_DEEPSTREAM.columnId]: {
columnId: MESSAGE_FROM_DEEPSTREAM.columnId,
columnName: state[MESSAGE_FROM_DEEPSTREAM.columnId].columnName,
columnColor: state[MESSAGE_FROM_DEEPSTREAM.columnId].columnColor,
messages: tempElement
}}));
})
视频以更好地理解我的糟糕描述: https ://youtu.be/s1PMxVeJ8Bw