【发布时间】:2021-01-01 15:24:20
【问题描述】:
我正在使用 React、Next.js 创建接收 WebSocket 消息并记录这些消息的 Web 应用程序。
我的状态有问题。 当我引用状态时,总是返回初始值。
我的代码如下所示:
import React, { useState, useEffect } from 'react';
import { Container, Row, Col } from 'react-bootstrap';
export default function Home() {
let socket = null;
const [eventLog, setEventLog] = useState([]);
const [updateFlag, setUpdateFlag] = useState(0);
const onWebSocketMessage = (e) => {
const data = JSON.parse(e.data);
setEventLog(
[
{
title: data.title,
icon: data.icon,
body: data.body,
date: new Date(),
},
].concat(eventLog)
);
setUpdateFlag(updateFlag + 1);
console.log(updateFlag);
};
const connectWebSocket = (token) => {
socket = new WebSocket('wss://localhost/' + token);
socket.onmessage = onWebSocketMessage;
};
useEffect(() => {
const token = localStorage.getItem('token');
connectWebSocket(token);
}, []);
const eventLogHtml = eventLog.map((obj, index) => (
<div key={index}>
<h2>{obj.title}</h2>
<div>
<img src={obj.icon} style={{ width: '8rem' }} />
<span>
<p>{obj.body}</p>
<p>{obj.date.toString()}</p>
</span>
</div>
</div>
));
return (
<>
<Container>
<Row>
<Col>
<h1>Event log</h1>
{eventLogHtml}
</Col>
</Row>
</Container>
</>
);
}
在此代码中,eventLog 始终返回初始值 []。
而console.log(updateFlag); 总是记录 0。
我预计收到消息时eventLog和console.log(updateFlag);会增加,但实际上只设置了最新的一个并且记录为0。
任何建议将不胜感激。 谢谢!
【问题讨论】: