为什么我的 Input 组件中的 setSetsValue 没有递增?

Why doesn't my setSetsValue increment inside my Input component?

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

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

defaultValues[0].sets.totalSets 的值不应该在每次按下按钮后递增吗?还是我想的那么荒唐。

感谢您的帮助!

代码:

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());
  };

我的输入组件:

function AppInput({ defaultValue }) {
  return (
    <TextInput
      underlineColorAndroid={"white"}
      keyboardType="numeric"
      defaultValue={defaultValue}
      editable={true}
      placeholderTextColor={"white"}
      style={styles.textInput}
    ></TextInput>
  );
}

看这个例子

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);
  };