reactjs - 如何使用大量 Web 套接字消息更新 Material-ui 进度条,导致渲染经常发生
问题描述
我正在使用 React 和 material-ui。我有一个每分钟发送 9000 条消息的网络套接字。
在我的反应应用程序中,我有一个 material-ui 确定进度条,它从 Web 套接字消息中获取其值。进度条不能准确反映来自 Web 套接字消息的值。
我将 Web 套接字消息存储在状态中,因此 UI 经常重新呈现。
如何避免这个问题?我无法限制消息,因为我需要保存和处理所有消息。提前致谢。
解决方案
您可以尝试限制您的状态更新。使用lodash throttle的解决方案可能如下所示:
const TOTAL = 100000;
const ProgressBar = ({socket}) => {
const cache = useRef([]);
const [messages, onMessage] = useState([]);
useEffect(() => {
const update = throttle(() => onMessage(cache.current), 500);
const handleMessage = message => {
cache.current = [...cache.current, message];
update();
}
socket.on('message', handleMessage);
return () => {
update.cancel();
socket.off('message', handleMessage);
}
}, []);
return (
<LinearProgress variant="determinate" value={messages.length / TOTAL} />
);
};
推荐阅读
- node.js - 如何将 git prehook 添加到 tslint?
- node.js - 在 Windows Server 上使用 PM2 无法访问节点服务器
- python - Python实时绘图,重新更新
- sql - 从不同的列加入同一张表上的多个计数?
- java - 多线程应用Java中的PrioirtyBlockingQueue
- javascript - 如何仅将参数传递给需要它的中间件?
- excel - 如何在 Excel 单元格中查找相同字符的第二次出现
- android - 没有找到可以自动化 Chrome 的 Chrome 驱动程序
- permissions - 向特定用户打开共享文件夹
- javascript - 如何在谷歌地图和 Ajax 中使用分页