gpt4 book ai didi

javascript - React Hooks 和 UseEffect 不使用 socketIO 数据更新显示。只渲染数组中的元素

转载 作者:行者123 更新时间:2023-11-30 09:10:38 24 4
gpt4 key购买 nike

import React, {useState, useEffect} from 'react';
import socketIO from 'socket.io-client';
import Container from 'react-bootstrap/Container';


function Sock() {
const [textData, setTextData] = useState([]);

useEffect(() => {
const socket = socketIO('http://127.0.0.1:5009');
socket.on('chat message', (text) => {
setTextData([
textData.push(text)
]);
console.log(textData);
});
},[]);

return (
<Container>
<h1>Socket</h1>
{textData.map((text) => <li>{text}</li>)}
</Container>
);
}

export default Sock;

在帮助下,我设法在 UI 上显示了一些东西,但它目前只显示数组计数,而不显示数组内的对象。我对 React hooks 还很陌生,如有任何帮助或建议,我将不胜感激。

最佳答案

few ways to take care of stale closure但对于您的简单情况,您可以使用 functional update获取先前文本数据的语法,并返回数组的新实例(不要改变现有状态,使用 push)。

  useEffect(() => {
const socket = socketIO("http://127.0.0.1:5009");
socket.on("chat message", text => {
setTextData(previousTextData => [...previousTextData, text]);
});
}, []);

使用回调方法,您不需要将 textData 放在 useEffect 的依赖数组中。

关于javascript - React Hooks 和 UseEffect 不使用 socketIO 数据更新显示。只渲染数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59376486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com