首页 > 解决方案 > React - 状态重置为 UseEffect 挂钩内的空数组

问题描述

我正在玩 Socket.io,但我不明白为什么我的“消息”状态在 useEffect 中总是返回一个空数组。

当我调用“setMessages”时,我会期望它会将“消息”从空数组更新为具有新对象的数组。

第二次调用 socket.on('message') 时,数组中会有一个对象,当我再次调用 setMessages 时,它会将第二个对象推送到它上面。

但它似乎总是空的,有什么想法吗?

谢谢

const [messages, setMessages] = useState<Array<Message>>([]);
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
  socket.on('connect', () => {
    console.log('user connected');
    socket.on("message", (message: Message) => {
      console.log(messages); // This is always an empty array
      setMessages([...messages, message]); // But here I set the state to a copy of the state plus 'message' which is an object with an id and message property.
    });
  });
}, [messages]);

标签: reactjstypescriptsocket.ioreact-hooks

解决方案


推荐阅读