javascript - 计算百分比差异 live websocket
问题描述
我连接到一个Websocket
流,它给了我 +100 的加密货币价格,实时(我大约每 2 秒获得一次新价格)。我想知道,如何计算每个加密货币价格在 5 分钟内的百分比差异,然后每隔一分钟更新一次?我正在使用带有本机 Websocket 连接(不是 socket.io)的 React。
我想我必须每分钟“保存”(不知何故)每个加密货币价格,但我该怎么做呢?
出于测试目的,为了查看是否可以每 10 秒更新一次加密货币价格,我尝试使用setInterval()
套接字.onmessage()
连接。
useEffect(() => {
console.log('Connection : ', connection);
if (connection) {
let interval;
connection.onmessage = evt => {
interval = setInterval(() => {
setPrice(crypto.BTCUSDT.price); // price variable is used to display the price of the crypto
console.log('----- Interval test -----')
clearInterval(interval);
}, 6000);
};
}
}, [connection]);
这不起作用,当setPrice()
第一次被调用时setInterval()
,就像setInterval()
被忽略并且价格仍然每 2 秒更新一次。相同,console.log()
每 2 秒显示一次,而不是每 10 秒显示一次。
- - - 编辑 - - -
在crypto
对象中,我有一个固定的时间戳,每分钟递增一次。有人知道我如何使用它来解决这个问题吗?
任何帮助将不胜感激。谢谢
解决方案
我可能错了,因为我不知道其余的代码,但如果你setInterval
不在 inside useEffect
,那么在每次渲染时都会创建一个新的间隔。并且每次setPrice
调用组件都会重新渲染。将事件侦听器放入useEffect
并查看是否可以修复它。
所以,我尝试了一些东西,这可以按照你想要的方式工作。至少,我理解你想要的方式。每setPrice
10 秒调用一次。
import React, { useState, useEffect } from "react";
export default function App() {
const [price, setPrice] = useState(0);
let interval;
useEffect(() => {
interval = setInterval(() => {
setPrice((prev) => prev + 1);
console.log({ price });
}, 10000);
return () => {
clearInterval(interval);
};
}, []);
return <div>{price}</div>;
}
推荐阅读
- android - 添加材料设计库时,我的日期选择器无法正常工作
- python-3.x - 批量迭代python列表的最简单方法
- kubernetes - Kubernetes RBAC 动词:没有列表,反之亦然?看没有清单?
- python - 在python中将对象数据类型转换为数字和分类
- xquery - MarkLogic:如何省略空的搜索构面值?
- javascript - 方括号前的分号
- java - Spring 5 + Hibernate 5:SessionFactory 如何与 LocalSessionFactoryBean 自动装配
- ios - iOS 在后台可以扫描多少个 BTLE 设备
- c# - 在 iOS13 上更改状态栏颜色
- c++ - 倒计时直到匹配数字