使用 socket.io 更新状态时出现问题,在设置状态后,它不会在下一个套接字消息之前保留
Trouble with updating state with socket.io, after state is set it is not retained before the next socket message
所以我正在尝试使用 reactjs 制作一个基本的评论应用程序,我有一个 nestjs 后端,我知道它已经可以工作了,因为我制作了一个基本的 html 页面来测试这个概念。
基本上,在一条新的“消息”上,我试图将评论状态设置为 [...comments, newComment],以便保留之前的评论。
但是每次我收到来自服务器的消息时,我的状态(评论)都会被新消息覆盖并且不会保留任何数据。
我做了一些故障排除,看起来状态(评论)根本没有被设置?
这是我的代码:
const socket = io('http://localhost:4000');
function App() {
const [comments, setComments] = useState([
]);
function newComment(comment) {
console.log("Request for new comment: ");
console.log(comments);
setComments([...comments, comment]);
}
useEffect(() => {
console.log("Comments updated to: ")
console.log(comments);
}, [comments]);
useEffect(() => {
socket.on("message", data => {
const theComment = data.data;
let leComment = { id: 4, name: 'ted', comment: theComment }
newComment(leComment);
});
}, []);
这是我在 chrome 中用于调试的控制台:
非常感谢任何帮助或建议,我已经坚持了一整天了!
我正在寻找的最终结果只是针对传入的任何新“消息”,该消息中的评论附加到我的状态,称为评论
我这里看到的问题是这样的
setComments([...comments, comment])
尝试在
中更改它
setComments(comments => [...comments, comment])
所以我正在尝试使用 reactjs 制作一个基本的评论应用程序,我有一个 nestjs 后端,我知道它已经可以工作了,因为我制作了一个基本的 html 页面来测试这个概念。
基本上,在一条新的“消息”上,我试图将评论状态设置为 [...comments, newComment],以便保留之前的评论。
但是每次我收到来自服务器的消息时,我的状态(评论)都会被新消息覆盖并且不会保留任何数据。
我做了一些故障排除,看起来状态(评论)根本没有被设置? 这是我的代码:
const socket = io('http://localhost:4000');
function App() {
const [comments, setComments] = useState([
]);
function newComment(comment) {
console.log("Request for new comment: ");
console.log(comments);
setComments([...comments, comment]);
}
useEffect(() => {
console.log("Comments updated to: ")
console.log(comments);
}, [comments]);
useEffect(() => {
socket.on("message", data => {
const theComment = data.data;
let leComment = { id: 4, name: 'ted', comment: theComment }
newComment(leComment);
});
}, []);
这是我在 chrome 中用于调试的控制台:
非常感谢任何帮助或建议,我已经坚持了一整天了!
我正在寻找的最终结果只是针对传入的任何新“消息”,该消息中的评论附加到我的状态,称为评论
我这里看到的问题是这样的
setComments([...comments, comment])
尝试在
中更改它setComments(comments => [...comments, comment])