繁体   English   中英

State 未在控制台中显示更新值

[英]State not showing updated value in console

尽管页面上的文本得到了更新,但 console.log 仍然会注销初始值。 为什么是这样? 我知道设置 state 是异步的,但为什么即使等待 1 秒后它仍会注销旧值?

import { useState, useEffect, useRef } from "react";

function App() {
  const [requestState, setRequestState] = useState("initial");

  useEffect(() => {
    setRequestState("changed");
    setTimeout(() => {
      console.log(requestState);
    }, 1000);
  }, []);

  return (
    <div className="App">
      {requestState}
    </div>
  );
}

export default App;

useEffect 将在组件渲染时运行,要有条件地调用 function,请指定依赖项列表。 经验法则是始终在 useEffect() 中添加您正在使用的那些依赖项

    import { useState, useEffect, useRef } from "react";
    
    function App() {
    const [requestState, setRequestState] = useState("initial");
    setRequestState("changed");  
    useEffect(() => {
    setTimeout(() => {
      console.log(requestState);
    }, 1000);
    }, [requestState]);

      return (
        <div className="App">
          {requestState}
        </div>
      );
    }
    
    export default App;

您的useEffect取决于 requestState 变量,因此将其传递到空列表中,如下所示:

useEffect(() => {some code},[used variables])

useEffect()钩子在执行时“捕获” state 和道具。 这就是为什么它具有陈旧的价值。 该值来自运行useEffect()中的 function 时的值。

这是 Dan Abramov 的一篇漂亮文章: https://overreacted.io/a-complete-guide-to-useeffect/ 它对与您的问题几乎完全相同的问题进行了解释。 完整阅读它以深入了解useEffect()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM