Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setState中的回调_Javascript_Reactjs - Fatal编程技术网

Javascript setState中的回调

Javascript setState中的回调,javascript,reactjs,Javascript,Reactjs,我有一个组件,eslint建议:“在引用前一个状态时使用setState中的回调。”告诉我,我需要如何重写代码以更新setState中组件的状态 我试图将函数传递给setState中的第二个参数,但是我得到了一个错误,我不知道这是否是正确的方法 声明: constructor(props) { super(props); this.state = { minutes: '24', seconds: '59', disabled: false, }; } 组件

我有一个组件,eslint建议:“在引用前一个状态时使用setState中的回调。”告诉我,我需要如何重写代码以更新setState中组件的状态

我试图将函数传递给setState中的第二个参数,但是我得到了一个错误,我不知道这是否是正确的方法

声明:

constructor(props) {
  super(props);
  this.state = {
    minutes: '24',
    seconds: '59',
    disabled: false,
  };
}
组件安装和设置状态:

componentDidMount() {
  const prevMinutes = localStorage.getItem('minutes');
  const prevSeconds = localStorage.getItem('seconds');

  this.setState({
    minutes: +prevMinutes !== 0 ? +prevMinutes : this.state.minutes, // warning here
    seconds: +prevSeconds !== 0 ? +prevSeconds : this.state.seconds, // and here
  });
}
现在代码工作正常,符合逻辑,但我想了解创建此类结构时的正确方法


另外,我知道解构,在我理解了为什么需要进行回调以及如何正确进行回调后,我会这样做。

这不是第二个参数,它仍然是第一个参数(称为updater),但您可以用如下函数替换对象:

this.setState(prev=>({
分钟:+prevMinutes!==0?+prevMinutes:prev.minutes,
秒数:+prevSeconds!==0?+prevSeconds:prev.seconds,
}));
根据:


第二个参数只是在状态更改后调用的回调。

setState((oldState)=>changes)
。阅读规则文档中的指南:实际上,您应该使用第二种方法使用
setstate
,即发送一个函数,该函数接收以前的状态作为参数,并使用该对象,而不是直接引用
此。state
@jornsharpe感谢链接!通过VS代码,它没有打开:)@KrishnaPrashatt谢谢你的解释,现在它更清晰了