微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么我的输入组件内的 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);
  };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。