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