为什么我的输入组件内的 setSetsValue 没有增加?

问题描述

我想增加我创建的输入组件内的值,它只需要一次点击就可以工作,然后它只是在启动 pressHandler 的每个按钮按下时在 5 和 6 之间来回切换。为什么会这样?

这可能是关于 defaultValues 数组本身的问题还是我的 setSetsValue 完全错误

不应该在每次按下按钮后增加 defaultValues[0].sets.totalSets 的值吗?或者我错了想一些荒谬的事情。

感谢您的任何帮助!

代码

int[] one = oneD.stream ().mapToInt (Integer::intValue).toArray ();

我的输入组件:

let defaultValues = [
    {
      sets: { totalSets: "4" },work: { min: "00",sec: "50" },rest: { min: "00",sec: "30" },},];

  const [setsValue,setSetsValue] = useState(defaultValues[0].sets.totalSets);

  const pressHandler = () => {
    defaultValues[0].sets.totalSets =
      parseInt(defaultValues[0].sets.totalSets) + 1;
    setSetsValue(defaultValues[0].sets.totalSets.toString());
  };

解决方法

看这个例子

let valueA = 1;
console.log(valueA); //log value
const handler = () => {
    valueA  = valueA + 1; //increase value
    setAnyStateValue(); //update state
  };

如果你调用 handler() 100 次 log results is : 1 !!!
为什么日志不增加???
因为 handler() 将通过函数 setAnyStateValue() 更新状态,每次更新状态时,组件 rerender again 和 valueA 再次声明 let valueA = 1;

如何解决这个问题

解决方案一

setSetsValue(x => x + 1); //this will update value based on last value plus one

方案二

  const pressHandler = () => {
    setSetsValue(parseInt(setsValue) + 1);
  };