如何在Reaction中记录更新后的计数值?

p4rjhz4m  于 2022-10-15  发布在  React
关注(0)|答案(4)|浏览(173)

为什么在点击按钮时没有记录更新后的计数值。它总是在按钮点击时记录上一个计数值。代码是这样的-

import { useState } from "react";

export default function App() {
  const [count, setCount] = useState(0);

  function updateCount() {
    setCount(count + 1);
    console.log(count);
  }

  return (
    <div className="App">
      <div>
        <p>You clicked {count} times</p>
        <button onClick={() => updateCount()}>Show alert</button>
      </div>
    </div>
  );
}
5lhxktic

5lhxktic1#

当您的状态依赖于旧状态值时,必须按如下方式进行更新:

function updateCount() {
    setCount(oldCount=>oldCount+ 1);
    console.log(count);
 }

您必须记住,更新状态不是立竿见影的操作,它非常快,但只需几毫秒

7vux5j2d

7vux5j2d2#

我最近正在学习React,我正面临着和你完全一样的问题。正如Mohammad所提到的,sole.log给出前一个值的原因是,在相同的方法中,您正在记录和更新值,并且它们同时发生。如果您只需将console.log放在函数下面,那么每次在日志记录前完成更新值时,它都会向您显示更新后的日志。

const incrementCount = (increment) => {
    setCount(count + increment);
  };
  console.log(count);

希望这个能帮上忙!

33qvvth1

33qvvth13#

如果您希望始终记录最新的值,只需执行以下操作:

import { useState } from "react";

export default function App() {
  const [count, setCount] = useState(0);

  console.log(count);

  function updateCount() {
    setCount(prevCount => prevCount + 1);
  }

  return (
    <div className="App">
      <div>
        <p>You clicked {count} times</p>
        <button onClick={() => updateCount()}>Show alert</button>
      </div>
    </div>
  );
}

在您的代码中,LOG函数记录一个过时的值是因为closure-count值是const,它是在第一次呈现组件时设置的。因此,当您单击该按钮时,Count的值不是新值,而是它第一次呈现时的值(即->总是比您预期的小一)。
在这段代码中,日志在每次重新呈现时发生。由于单击该按钮会调用setCount,因此状态会更改,并且会发生重新渲染。发生这种情况时,将执行日志,您将获得最新的值:)

thtygnil

thtygnil4#

这就是Reaction生命周期的工作方式。您的值的console.log将使用渲染时count的值
渲染-->执行具有给定状态值的所有函数-->检查状态更改-->渲染-->执行具有新状态值的所有函数
每次渲染都使用静态值。
如果您希望看到您的计数输出到控制台,则需要使用useEffect

相关问题