我具有向服务器发送请求以判断是否存在新的日志(log)消息的react 组件LogMessage.

export default function LogMessage () {
    const [logMessage, setLogMessage] = useState({});
    const fetchData = async () => {
        try {
            const response = await fetch('http://localhost:8989/get-log');
            const data = await response.json();
            setLogMessage(data);
        } catch (error) {
            console.error('Error fetching data:', error);
        }

    };
    useEffect(() => {
        const interval = setInterval(() => {
            fetchData();
          }, 1000);
          return () => clearInterval(interval);
      }, []);

    return (
        <div className="log">
            <p>Logger</p>
            <div className="log_wrapper">
                {Object.entries(logMessage).map(([key, message]) => (
                    <span>{message}</span>
                ))}
            </div>
        </div>
    )
}

每次获取时,我以前显示的消息都会被新的消息重新呈现,而不是添加到页面上已经显示的消息中. 回应似乎是这样的:

{
    "message1": "12:48:49:271  some text",
    "message2": "12:48:49:458  some text",
    "message3": "12:48:49:758  some text",
    "message4": "12:48:49:913  some text",
    "message5": "12:48:50:024  some text"
}

如果没有任何响应FETCH的新消息,则空的json返回{}.

有没有办法在页面上显示新消息和保存旧消息?

推荐答案

您可以将新数据与该州的现有数据合并.

setLogMessages(prev => ({ ...prev, ...data }));

这会将新数据(如果有的话)添加到先前的状态值中.

Reactjs相关问答推荐

Formik验证不适用于物料UI自动完成

有没有办法让两个状态在两次精准渲染中更新?

梅X折线图无响应

在Map()完成React.js中的多个垃圾API请求后执行函数

无法在下一个标头上使用 React hooks

Symfony ux-react:使用react_component()时React组件不会渲染

如何在 TimePicker 中更改时钟 colored颜色 和确定按钮字体 colored颜色 - MUI React

使用 MuiCssBaseline 在所有 MUI v5 标签上设置边距 0

类型错误:类型typeof import(js-cookie)上不存在属性get

ReactJS 动态禁用按钮

MUI - ButtonGroup fullWidth 条件屏幕大小不起作用?

添加新行时自动打开可扩展表格(Antd 表格,ReactJS)

单击按钮或文本从一个组件移动到另一个组件

页面加载时不显示数组中的数据

useState 在生命周期中的位置

从一个获取 axios 请求(ReactJS)中删除默认参数

具有自动完成功能的 Formik material ui 无法按预期工作

需要帮助在 document.queryselector 的 nextjs 页面上插入 useEffect 状态

为什么 React 会多次调用我的应用程序的某些函数?

为什么我不能使用 formik 更改此嵌套对象中的值