反应挂钩状态不会在日志中更新

时间:2019-04-05 09:46:04

标签: reactjs

如果我写

function Component() {
  const [isLoading, setLoading] = useState(true);
  const request = () => {
    setLoading(true)
    console.log(isLoading)
    setLoading(false)
    console.log(isLoading)
  }
}

它将两次注销“ true”。为什么控制台中的状态没有更新?即使它在DOM中也能正常工作。

this.setState({ ...}将显示新的状态值

2 个答案:

答案 0 :(得分:3)

使用setStateuseState挂钩将新值设置为状态是一个异步过程。

如果要在更改后记录新值,则必须将其与useEffect钩子配对

useEffect(() => {
  console.log(isLoading)
}, [isLoading]);

答案 1 :(得分:0)

Arnaud的回答是100%正确的,但是当我玩这些东西时,令我感到困惑的是两次调用setState的效果与更新后直接尝试console.log的效果不同。 / p>

这是因为React在内部处理状态更新的方式,即使您的日志可能有误,您的状态实际上也已正确更新。