为什么我的 React 组件中的变量没有按预期增加?

Why doesn't a variable increment in my React component as expected?

我是一名React学习者,我想了解一些东西。下面的代码不起作用,它只是一个带有两个按钮的组件,可以添加或减去一个数字并显示它。这是完整的代码:

import React from "react";
import { useState } from "react";

const Compteur = () => {
  let i = 0;
  const [number, setNumber] = useState(0);

  const increment = () => {
    i++;
    setNumber(i);
  };

  const decrement = () => {
    i--;
    setNumber(i);
  };

  return (
    <div>
      <button type="button" onClick={increment}>
        +
      </button>
      <button type="button" onClick={decrement}>
        -
      </button>
      <p>Number : {number}</p>
    </div>
  );
};

export default Compteur;

但是,如果我用 setNumber(number + 1) 替换 setNumber(i),效果会很好。这个 i 变量有什么问题?感谢您的帮助!

欢迎使用 React!

您示例中的问题是每次组件重新呈现(在您的情况下是由于状态更改),i 都会重新初始化并分配一个值 0。我认为您更多地将组件视为循环,而不是 javascript 文件。 React 在维护状态方面做得很好,并且即使重新渲染组件,该状态也会保持不变,这就是为什么当您使用 number (React 状态的一部分)而不是 [=10= 时它会按预期工作的原因]

所以你的问题是设置 let i = 0; 因为反应代码在每次重新渲染时重新运行,这是由状态变化(以及其他方式)引起的。

因此,当您调用 setNumber 时,react 会说“好的,重新呈现页面”,它会沿着您的代码向下移动,并看到“将 i 设置为 0”,然后当您递增代码时说“i++”或在本例中为“0 + 1”(因为我再次设置为 0)。

本质上,每次 react 重新渲染组件时,它都会重置变量中的值。这就是我们必须使用 useState 的原因,因为 React 能够跟踪这些值。

你的例子 setNumber(number + 1) 就是你应该如何写的。

您正在使用变量 i,它会在每次渲染时重新初始化,您的代码应该是这样的

const increment = () => {
    setNumber(number + 1);
}

const decrement = () => {
    setNumber(number - 1);
}