0

感谢您的阅读和我的帮助。

所以我有一个深流 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

4

0 回答 0