reactjs - 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]);
解决方案
推荐阅读
- corda - 将收到的钱(钱是一个例子)从 A 发送给 B
- java - 未清理tomcat中已关闭套接字的打开文件描述符
- firebase - 如何从 Firebase 存储中下载图像并将其存储在颤动的列表中
- c# - 将 WPF Datagrid 中的数据检索到 List 中的列数不同
- groovy - Groovy YamlBuilder 现场案例
- sql - 如何在sql查询中检查所有时间段的时间
- r - 如果在 R Markdown 中有其他内容,则为彩色文本
- amazon-web-services - 大家好,请任何人帮助我们如何使用 AWS CLI 获取实例状态
- javascript - 过滤后如何拆分querySelectorAll结果
- docker - 无法连接到 unix:///var/run/docker.sock 的 Docker 守护程序:在 debian 拉伸 armv7 中