反应“间隔”始终处于相同状态

保罗

我正在使用带有脚本的react 16.10。我有以下代码:

  const [state, setState] = useState<State>({
        test: 1
    });  

    //On component mount we start our interval
    useEffect(() => {
        const timerID = setInterval(timer, 5000); //every 5 seconds

        return function cleanup() {
            //When we leave component we stop the timer
            clearInterval(timerID);
        };
    }, []); 

   function timer() {
        if(state.test === 3){
            //HE WILL NEVER ENTER THIS CODE FUNCTION
        }

        setState({...state, test: 3}); // Next time we should have the value 3, BUT IT HAS NEVER THIS VALUE?!?!
    }

   return (
        <>
     <span>The output is {state.test}</span> //First it is showing 1, after 5 seconds 3. Working great
        </>
    );

我将test的值更改为间隔“ timer”中的数字3。setState工作正常。我可以在组件中看到该值,看到数字从1切换到3。

但是在计时器功能中,该值永远不会更改。每次默认值为1。

我做错了什么?

哈迪克·萨塔西亚

您需要添加依赖项 useEffect

 //On component mount we start our interval
  useEffect(() => {
      const timerID = setInterval(timer, 5000); //every 5 seconds

      return function cleanup() {
          //When we leave component we stop the timer
          clearInterval(timerID);
      };
  }, [state.test]); // <- here add dependency

原因

当安装了组件并存储了timer函数引用时,效果函数仅被调用一次现在当你状态改变的时候你timer functionupdated outside不会inside of useEffect

useEffect仍然使用旧的参考,当state was 1使inside it State always going to be 1referred timer function

现在,当您通过state.test依赖时。状态更改后,您的效果将更新,现在开始使用timer function具有新状态的new。

因此,现在您可以在中更新状态了timer function并且您的状况可以正确评估。

如有任何疑问,请发表评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MPNowPlayingInfoCenter始终处于播放状态

来自分类Dev

MPNowPlayingInfoCenter始终处于播放状态

来自分类Dev

组合处于反应状态的对象

来自分类Dev

CKEditor新实例始终处于卸载状态

来自分类Dev

Android Actionbar图标始终处于溢出状态

来自分类Dev

使md-tooltip始终处于活动状态?

来自分类Dev

芹菜任务始终处于待处理状态

来自分类Dev

Docker容器始终处于退出状态

来自分类Dev

javascript按钮始终处于禁用状态

来自分类Dev

RAM未清除,始终处于待机状态

来自分类Dev

Android Actionbar图标始终处于溢出状态

来自分类Dev

存档按钮始终处于禁用状态

来自分类Dev

我如何使数组处于状态-反应性

来自分类Dev

导航栏上的自举词缀,属性始终处于启用状态(类始终处于活动状态)

来自分类Dev

AngularJS多个URL处于相同状态

来自分类Dev

如何保持会话在其MaxInactive间隔之外仍处于活动状态

来自分类Dev

Springboot运行状况检查始终处于关闭状态

来自分类Dev

单CPU始终处于100%滞后状态| Ubuntu 18.04.4

来自分类Dev

react-router索引路由始终处于活动状态

来自分类Dev

PHP处于“或”状态的while循环始终在较高的值处停止

来自分类Dev

Angular 2 routerLinkActive对于基本路径始终处于活动状态

来自分类Dev

使某些Tkinter列表框项目始终处于选中状态

来自分类Dev

Bootstrap菜单的最后一项始终处于活动状态

来自分类Dev

单CPU始终处于100%滞后状态| Ubuntu 18.04.4

来自分类Dev

如何使我的独立显卡始终处于启用状态?

来自分类Dev

Django中的Celery任务始终处于阻塞状态

来自分类Dev

jQuery如何使复选框始终处于选中状态

来自分类Dev

jqgrid复选框始终处于选中状态

来自分类Dev

无论设备(ios),Admob始终处于按钮状态

Related 相关文章

  1. 1

    MPNowPlayingInfoCenter始终处于播放状态

  2. 2

    MPNowPlayingInfoCenter始终处于播放状态

  3. 3

    组合处于反应状态的对象

  4. 4

    CKEditor新实例始终处于卸载状态

  5. 5

    Android Actionbar图标始终处于溢出状态

  6. 6

    使md-tooltip始终处于活动状态?

  7. 7

    芹菜任务始终处于待处理状态

  8. 8

    Docker容器始终处于退出状态

  9. 9

    javascript按钮始终处于禁用状态

  10. 10

    RAM未清除,始终处于待机状态

  11. 11

    Android Actionbar图标始终处于溢出状态

  12. 12

    存档按钮始终处于禁用状态

  13. 13

    我如何使数组处于状态-反应性

  14. 14

    导航栏上的自举词缀,属性始终处于启用状态(类始终处于活动状态)

  15. 15

    AngularJS多个URL处于相同状态

  16. 16

    如何保持会话在其MaxInactive间隔之外仍处于活动状态

  17. 17

    Springboot运行状况检查始终处于关闭状态

  18. 18

    单CPU始终处于100%滞后状态| Ubuntu 18.04.4

  19. 19

    react-router索引路由始终处于活动状态

  20. 20

    PHP处于“或”状态的while循环始终在较高的值处停止

  21. 21

    Angular 2 routerLinkActive对于基本路径始终处于活动状态

  22. 22

    使某些Tkinter列表框项目始终处于选中状态

  23. 23

    Bootstrap菜单的最后一项始终处于活动状态

  24. 24

    单CPU始终处于100%滞后状态| Ubuntu 18.04.4

  25. 25

    如何使我的独立显卡始终处于启用状态?

  26. 26

    Django中的Celery任务始终处于阻塞状态

  27. 27

    jQuery如何使复选框始终处于选中状态

  28. 28

    jqgrid复选框始终处于选中状态

  29. 29

    无论设备(ios),Admob始终处于按钮状态

热门标签

归档