当前位置: 首页 > 知识库问答 >
问题:

前端 - 为何setInterval() 方法,为何没有增加设置state内容呢?

东门令
2023-08-07

我有一个如下的React测试代码:

const [tracerouteMsgs, setTracerouteMsgs] = useState([])useEffect(() => {    console.log('result: ', tracerouteMsgs)}, [tracerouteMsgs])...<Button onClick={() => {  setInterval(() => {    const tempTracerouteMsgs = tracerouteMsgs.concat(3)    setTracerouteMsgs(tempTracerouteMsgs)  }, 1000)}}>traceroute测试</Button><span>tracetoute结果:</span>{  tracerouteMsgs.map((item, index) => (    <span key={index}>{item}</span>  ))}

当我在点击按钮的时候(这里只显示3):

image.png

控制台打印:
image.png


这里没有符合预期,预期是想要应该是这样才对

[3][3, 3][3, 3, 3][3, 3, 3, 3]...

共有1个答案

穆乐逸
2023-08-07

首次点击按钮时,click函数里持有的tracerouteMsgs的值是初始化拿到的[], 即使调用setTracerouteMsgs后更新tracerouteMsgs的值,但函数里面的仍然是最初是[],因此你打印出来的结果一直都是[3]

改成这样:

setTracerouteMsgs(prev => prev.concat(3))
 类似资料:
  • 我使用AWS Elasticsearch服务版本7.1及其内置Kibana来管理应用程序日志。Logstash每天都会创建新索引。我的Logstash不时会出现有关最大分片限制范围的错误,我必须删除旧索引才能再次工作。 我从这个文档(https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-handlin

  • 问题内容: 我的开发机器上有8GB RAM,并试图运行Apache Tomcat(7.0.29)同时托管Artifactory(2.6.3)和Jenkins(1.479)。我试图找到Jenkins的内存需求,但看起来他们的Wiki断了。 在中,我添加了以下命令: 这应该将Tomcat的JVM的大小保持在(基本上)1到3 GB之间,为我留出足够的空间来容纳其他内容, 并 为Tomcat留出足够的内存

  • 我有如下的使用zustand store的示例: 1、文件:store/index.ts 2、在pages/home页面中: 为何在我的pages/home 页面中会直接报错呢?引入todoList报错: 我这样引入就不会报错:

  • null 当我创建正文部分时,我是否应该显式地设置top mime消息的内容类型,然后设置每个正文部分? 如果是,在上面的例子中它们应该是什么? 对于html建议,对于附件建议,对于内联建议。我正在使用所有这些,那么对于完整的消息和不同的主体部分应该是什么内容类型? 通过上面的代码,我得到了正确的html文本,纯文本,内联图像和附件在正确的地方与James集成的ThunderBird。 因此,我不

  • 问题内容: 我正在尝试显示媒体存储的多个列,例如艺术家,专辑,标题等。我能够正确获取arraylist中的一个列,并且可以正常工作,但是当我添加另一个列时,所有列都在同一列中数组列表,所以我创建了一个类,并在该类方法中添加了列。但是我无法在custome适配器中声明它,这是我的代码。 活动主体 方法类别 CustomeAdapter 定制XML 如何将方法设置为数组。如何获取任何示例的方法都将有所

  • 问题内容: 为什么?将迭代器项指针移到第一位置的最佳方法是什么? 问题答案: 为什么? 因为如果强制迭代器具有重置方法,则 每个 迭代器都必须具有重置方法。这给每个迭代器编写者额外的工作。再加上一些迭代器确实很难重置(或者真的很昂贵),并且您不希望用户对其调用reset。文件或流上的迭代器就是很好的例子。 将迭代器项指针移到第一位置的最佳方法是什么? 创建一个新的迭代器。它很少比重置昂贵。