首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >状态不随React钩子而变化

状态不随React钩子而变化
EN

Stack Overflow用户
提问于 2020-03-10 20:57:53
回答 2查看 39关注 0票数 0

为什么在执行runTimer之后,它每秒都会不断地记录0?

代码语言:javascript
运行
复制
const [timer, setTimer] = useState(0)
 const runTimer = (x) => {
   let interval = setInterval(() => {
     setTimer(prev => prev - 1)
     console.log(timer)
   }, 1000)
 }
EN

回答 2

Stack Overflow用户

发布于 2020-03-10 21:00:47

该值具有作用域,并且将始终保持不变

尝试将该值记录到外部,因为状态更改将强制呈现。同样,State永远不应该“变异”。状态应该始终是一个新对象,而不是一个突变。

代码语言:javascript
运行
复制
const [timer, setTimer] = useState(0)
 const runTimer = (x) => {
   let interval = setInterval(() => {
     setTimer(prev => prev - 1)
   }, 1000)
 }
 console.log(timer)

你的第二个问题

let interval的作用域意味着您只能在该级别执行clearInterval。我不确定用这种方法做这件事的好方法。您可能希望使用钩子useEffect来设置间隔。

票数 1
EN

Stack Overflow用户

发布于 2020-03-10 21:12:13

setTimer是异步调用,您无法在设置状态后立即获取timer

useEffect是来营救的。

代码语言:javascript
运行
复制
useEffect(() => {
    // your action
}, [timer]);

您将始终获得更新后的timer值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60618142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档