亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

反應狀態重置

反應狀態重置

Smart貓小萌 2022-10-21 10:54:55
我有一個訂閱 EventEmitters 事件的基本組件。它要做的就是積累一系列消息。然而,正在發生的事情是消息數組最終只包含最新消息。這是組件源:export const MessageList = ({serverId, connection}) =>{    var [messages, setMessages] = useState([]);    const appendSystem = (message) =>    {        console.log("Appending " + message);        console.log(messages);        setMessages([...messages, message]);    }    useEffect(() =>    {        connection.on('system', appendSystem);        return () => connection.removeListener('system', appendSystem);    },    [serverId]);    console.log("Rendering");    console.log(messages);}然而,我得到的輸出......Rendering[]Appending Permission granted. Attempting connection.[]Rendering["Permission granted. Attempting connection."]Appending Connection Succeeded[]Rendering["Connection Succeeded"]所以看起來每次appendSystem調用,messages都是一個空數組。因此,setMessages 總是將新消息附加到一個空數組中。有誰知道這可能是什么原因造成的?我的印象是 appendSystem 出于某種原因在開始時緩存“消息”,并重用原始值,但不知道我將如何調試或修復它。
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

這是 React 鉤子的非直觀狀態設置機制的常見問題。

嘗試使用setMessages函數作為其參數,而不是使用新值。這將保證您使用它的最新值:

setMessages(prevMessages => [...prevMessages, message]);



查看完整回答
反對 回復 2022-10-21
  • 1 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號