反应 setState 不更新状态

新手上路,请多包涵

所以我有这个:

let total = newDealersDeckTotal.reduce(function(a, b) {
  return a + b;
},
0);

console.log(total, 'tittal'); //outputs correct total
setTimeout(() => {
  this.setState({ dealersOverallTotal: total });
}, 10);

console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); //outputs incorrect total

newDealersDeckTotal 只是一个数字数组 [1, 5, 9] 例如

但是 this.state.dealersOverallTotal 没有给出正确的总数,但是 total 呢?我什至设置了超时延迟,看看这是否解决了问题。

任何明显的还是我应该发布更多代码?

原文由 The worm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 675
2 个回答

setState() 通常是异步的,这意味着在您 console.log 状态时,它还没有更新。尝试将日志放入 setState() 方法的回调中。状态改变完成后执行:

 this.setState({ dealersOverallTotal: total }, () => {
 console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1');
 });

原文由 Fabian Schultz 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果是钩子,你应该使用 useEffect 钩子。

 const [fruit, setFruit] = useState('');

setFruit('Apple');

useEffect(() => {
  console.log('Fruit', fruit);
}, [fruit])

原文由 Siraj Alam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题