【问题标题】:ReactJS: changes in state not recognized inside functions?ReactJS:函数内部无法识别状态变化?
【发布时间】:2022-01-16 20:11:31
【问题描述】:

假设我有一个递增计数器的recursive 函数,并且我想根据用户请求重置此计数器。

为此,我声明了一个状态变量,当用户请求重置时该变量将变为“真”。

在我的函数中,我有一个条件来检查这个状态变量是否为真,如果是,它会做什么来重置计时器。

不幸的是,由于无法识别状态更改,因此条件永远不会为真(我使用控制台再次检查以确保)。

当使用像window.resetRequested 这样的全局变量时,或者通过在组件函数之外声明一个变量而不是state,同样的代码也可以工作。

我觉得这里缺少一些基本的东西(这是有道理的,因为我对网络编程还很陌生)。

let timerValue = currentUser.sessionTimeout;

       function createTimer() {
            if (timerResetRequested === true) {
                timerValue = currentUser.sessionTimeout;
            }
    
            if (timerValue === 0) {
                const logOutDate = new Date();
                logOut();
            }

            else {
                setTimeout(() => {
                    timerValue --;
                    createTimer();
                }, 1000);
            }
        }
    
        createTimer();

以上几乎就是我想要做的。

感谢您的帮助。

【问题讨论】:

  • initialTimervalue 在哪里使用?
  • @Mohit Maroliya B17CS036 谢谢,我在粘贴代码时遇到了一些问题,忘记了这一行。固定。

标签: reactjs state


【解决方案1】:

我不太熟悉

让 timerResetRequested = currentUser.sessionTimeout;

但是,您似乎根本没有与状态交互,这就是您没有看到状态变化的原因。

通常你会声明一个状态值:

const [timeValue, setTimeValue] = useState(0)

然后您可以实现一个函数,例如通过单击按钮来增加该状态值。

然后要重置计时器的值,您将实现一个重置函数,它将状态值重置为零。

我希望这是有道理的?

【讨论】:

  • 真的,我修正了我的帖子,对我造成的混乱表示歉意。这应该是计数器的初始值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2020-09-01
  • 2018-02-10
  • 2020-06-19
  • 2022-01-04
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多